Union als rückgabewert
-
Hi,
ich habe da mal eine Frage zu union.
Ich habe eine definiert
union IniRead { char *cTemp; bool bTemp; int iTemp; }uIniRead;Diese will ich als rückgabewert haben denn meine Funktion
uIniRead __fastcall Translation::GetGlobalString(AnsiString Name, IniOption typ) { uIniRead uTemp; TIniFile *ini = new TIniFile(GetAppDir() + LangDir + "language.ini"); switch(typ) { case ReadString: uTemp.cTemp = (char*)ini->ReadString("Translation", Name, "StringNotFound"); break; case ReadInteger: case ReadBool; uTemp.iTemp = ini->ReadInteger("Translation", Name, -1); break; } delete ini; return uTemp; }Soll eben entweder einen String, bool oder integer zurückgeben.
Ich bekomme allerdings die Fehler :
[C++ Error] TRANSLATIONCLASS.H(56): E2303 Type name expected
[C++ Error] TRANSLATIONCLASS.H(56): E2139 Declaration missing ;
[C++ Warning] rev.h(3): W8058 Cannot create pre-compiled header: initialized data in header
[C++ Error] translationclass.cpp(220): E2238 Multiple declaration for 'uIniRead'
[C++ Error] defines.h(76): E2344 Earlier declaration of 'uIniRead'
[C++ Error] translationclass.cpp(220): E2141 Declaration syntax errorin der Klassendefinition
Die ersten 2. Ich denke die letzten 3 sind folge Fehler denn ohne diese Funktion hats geklappt zu compilieren.... uIniRead __fastcall GetGlobalString(AnsiString Name, IniOption); ...
-
Hallo,
Deine Union heißt IniRead nicht uIniRead. Das ist schon eine Instanz auf IniRead. Lass das uIniRead bei der Deklaration deiner Union einfach weg.
Ciao
-
Fox-Alpha schrieb:
[cpp]
case ReadString:
uTemp.cTemp = (char)ini->ReadString("Translation", Name, "StringNotFound");*
break;
[/cpp]args... du weisst, dass ReadString einen AnsiString zurueckliefert, den du dann nach char* castest, beim verlassen der funktion wird der AnsiString freigegeben und dein cTemp zeigt in einen nicht definierten speicherbereich, was frueher oder spaeter zu einer zugriffsverletzung fuehrt!
reserviere mit new[] speicher fuer den string und kopiere ihn in cTemp hinein! daran denken ihn auch wieder frei zu geben!