Próbuje w C++ Builderze (wersja C++ Builder Community Edition 11) wykorzystywać na kilku formularzach połączonych ze sobą w ramach jednego projektu (dyrektywami #include) przekazywanie i modyfikowanie zmiennych, które są zadeklarowane w osobnym pliku (rozszerzenie .h), który także dołączony jest do całości projektu. Jeśli chodzi o owy plik i dwie formy z których składa się wygenerowany projekt, to wszystko jest ok tj kompilacja i uruchomienie przechodzą bez "warningów". Problem o którym napiszę nie występował we wcześniejszych wersjach C++ Buildera. I tak najprościej, jeżeli posiadam plik o nazwie zmienne.h i zawartości:
#ifndef _zmienne_h_
#define _zmienne_h_
int a;
int b;
int c;
int d;
#endif _zmienne_h_
Mogę tym zmiennym w głównej formie projektu bardzo łatwo przypisać jakieś wartości np w taki sposób:
a=StrToInt(Edit1->Text);
b=StrToInt(Edit2->Text);
c=StrToInt(Edit3->Text);
d=StrToInt(Edit4->Text);
Z kolei gdybym chciał teraz te 4 zmienne wyświetlić na kolejnej formie (która też przynależy do projektu i dyrektywami #include również jest połączona z plikiem zmienne.h) to wyświetlając ponownie te zmienne już w nowej formie (po uprzednim Form2->Show()), uzyskuje wykonując już np takie działanie w ramach nowej formy:
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Label1->Caption=IntToStr(a);
Label2->Caption=IntToStr(b);
Label3->Caption=IntToStr(c);
Label4->Caption=IntToStr(d);
}
bardzow dziwne wyniki, mianowicie wszystkie "labele" wynoszą: 0 (mimo, że dostała im przyporządkowana zupełnie inna wartośc!).
I do tego wsykaują długie komunikaty warningów dotyczące zadeklarowanych zmiennych:
italics[ilink32 Warning] Warning: Public symbol '_d' defined in both module C:\USERS\ADMIN\DOCUMENTS\C_PLUS\MODULY\WIN32\DEBUG\NOWA_FORMA.OBJ and C:\USERS\ADMIN\DOCUMENTS\C_PLUS\MODULY\WIN32\DEBUG\PPRZYKLAD.OBJ
Dotyczą te komunikaty wszystkich zmiennych. Jest to o tyle dziwne, że wszystkie moduły/formy/pliki są w jednym katalogu i się "doskonale wdzią" w ramach kompilacji.
Tutaj znalazłem coś podobnego, tylko nie bardzo rozumiem sposób rozwiązania tego problemu:
https://stackoverflow.com/questions/71156202/public-symbol-tpdsc-void-defined-in-both-module-x-and-y