Odwoływanie się do zmiennej w innej Formie

0

Witam, piszę program w Borland C++, którego główna forma to Form1 (Unit1.cpp). Zadeklarowałem globalnie zmienną TBitmap:

Graphics::TBitmap *bit = new Graphics::TBitmap;

Teraz chciałbym odwołać się do zmiennej bit z poziomu Form2 (Unit2.cpp), jak tego dokonać? Próbowałem zadeklarować zmienną *bit w Unit1.h w public i dopisałem w Unit2.cpp

#include "Unit1.h"

, odwołuję się wtedy do niej przez Form1->bit, jednak przy próbie modyfikacji czy odczytu wartości tej zmiennej mam jakiś błąd adresowania.
Liczę na Waszą pomoc.

0

Zdecyduj się. Albo zadeklarowałeś ją globalnie albo jako pole w formularzu.
Wiesz do czego służą pliki nagłówkowe?
Odstaw lepiej programowanie graficznych interfejsów nim nie nauczysz się podstawowych zasad programowania. Na razie uczysz się, jak nie programować.

i tak na przyszłość: jak występuje "jakiś błąd" to użyj "jakiegoś rozwiązania".

0

Wiem, że mam braki w podstawach programowania, dlatego właśnie zadałem pytanie na forum. Oczekiwałem jakiejś wskazówki, a nie "nie baw się w to, póki nie umiesz". Program piszę do własnego użytku i jest prawie gotowy, tylko to mi pozostało. Deklarując zmienną w pliku nagłówkowym w sekcji public mogę normalnie operować na zmiennych typu String, int, problem występuje tylko w bitmapach, domyślam się, że to wina * przy deklaracji.

0

Jeżeli zadeklarowałeś zmienną bit w klasie, której deklaracja znajduje się w pliku unit1.h to jest zupełnie co innego niż zmienna bit będąca zmienną globalną zdefiniowaną w pliku unit1.cpp. Można tą zmienną zadeklarować w pliku h i zdefiniować w jednym i tylko jednym pliku cpp, wtedy będzie można ją użyć w każdym pliku cpp załączającym ten plik nagłówkowy (nie jestem pewien, czy nie trzeba przed deklaracją użyć słowa kluczowego extern, chyba trzeba, niech ktoś w tym zorientowany w tym temacie się wypowie (nie chcę mi się sprawdzać, używam w takim wypadku statycznych składowych klasy)).

0

może napiszę co kolega zjarek miał na myśli trochę czytelniej:
plik.cpp:

Graphics::TBitmap *bit;

w oncreate:

bit = new Graphics::TBitmap;

w ondestroy:

delete bit;
bit = NULL; // tak w razie co, moze sprawdzac w innej formie czy ta forma jeszcze istnieje i wraz z nia bitmapa

plik.h:

extern Graphics::TBitmap *bit; // to oznacza tyle co: w którymś pliku cpp znajduje się ta zmienna

plik2.cpp:

#include "plik.h"

void jakasfunkjca()
{
  bit->... // robisz co chciales
}
0

krwq, zrobiłem tak:
w Unit1.cpp deklaruję

Graphics::TBitmap *bump;

w OnCreate Form1 mam

bump=new Graphics::TBitmap;

w Unit1.h:

extern Graphics::TBitmap *bump;

W Unit2.cpp

#include "Unit1.h"
#include "Unit1.cpp"

Przy próbie zmodyfikowania zmiennej bump w jakiejś procedurze w Unit2.cpp otrzymuję błąd:

Access violation at address 400BC7D0 in module 'vcl60.bpl'. Read of address 0000002C.

0

W końcu udało mi się, zmienną zadeklarowałem w Unit1.cpp, w Unit2.cpp wpisałem extern Graphics::TBitmap *bump, includnąłem tylko plik "Unit1.h", wcześniej miałem #include "Unit1.cpp" i dlatego wysypywał błąd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1