Compiler-Error in dstring.h bei Release-Kompilation
-
Hallo,
mir ist da mal was merkwürdiges bei meinem BCB 4.0 Std aufgefallen!Wenn ich unter Project->Options in der Registerkarte "Compiler" die Kompilationsmethode von "Debug" auf "Release" umstelle bekomme ich beim kompilieren die Fehlermeldungen:
[C++ Error] dstring.h(60): E2152 Default expression may not use local variables.
[C++ Fatal Error] dstring.h(60): F1004 Internal compiler error at 0x1291dd2 with base 0x1200000.Wenn ich wieder auf Debug schalte, sind sie "weg".
Weiß jemand, woran das liegt (oder liegen könnte)?
Ich habe mal ein bisschen geforscht und herausgefunden, dass die Option "disable inline expansions" daran schult ist, ist sie aktiv, tritt der Fehler nicht auf, wird sie (wie durch Release-Build) deaktiviert, tritt er auf!P.s. der Fehler tritt bei allen meinen Projekten auf, auch bei neuen!
-
Reyx schrieb:
[C++ Error] dstring.h(60): E2152 Default expression may not use local variables.
[C++ Fatal Error] dstring.h(60): F1004 Internal compiler error at 0x1291dd2 with base 0x1200000.Poste doch einfach mal, was in dstring.h an Zeile 60 steht (wenn es geht, natürlich auch die zugehörigen Zeilen drumherum), dann kann dir viel besser geholfen werden!
Moritz
-
Das hier:
// Constructors __fastcall AnsiString(): Data(0) {} // Das ist die Zeile 60!!!! __fastcall AnsiString(const char* src); __fastcall AnsiString(const AnsiString& src); // __fastcall AnsiString(const char* src, unsigned char len); __fastcall AnsiString(const char* src, unsigned int len); __fastcall AnsiString(const wchar_t* src); __fastcall AnsiString(char src); __fastcall AnsiString(short); __fastcall AnsiString(unsigned short);
-
Reyx schrieb:
// Constructors __fastcall AnsiString(): Data(0) {} // Das ist die Zeile 60!!!!Die Fehlermeldung ergibt hier keinen Sinn, denn da ist nirgendwo ein Defaultargument...
Hast du evtl. an der Datei etwas verändert? Oder vielleicht eine globale Variable namens Data definiert? Ist Data denn als Element von AnsiString definiert? (hoffentlich)Moritz
-
Das sie keinen Sinn ergibt ist mir auch schon aufgefallen, aber trotzdem taucht sie auf (allerdings wieder nur, wenn ich die Inline-Expansions aktiviere). Die Datei istz original vom Builder; Nichts verändert!
Es ist ja auch letzlich gar nicht so schlimm, kompilieren kann ich ja wunderbar (und auch als FinalRelease), nur ich werde halt aus der Meldung an sich nicht schlau...!?
-
Der Borland-Compiler optimiert im Release-Modus ziemlich gut (viel besser als sein Ruf!). Leider z.T. ein wenig zu aggressiv.
Ich habe solche Probleme öfters in Bezug auf lokale Variablen, deren Adresse ich irgendwo (lokal) verwende. Der Compiler steckt die Dinger trotzdem in ein Register. Und dann macht der Adreßoperator keinen Sinn mehr.
Vielleicht hat es bei dir auch damit zu tun? Experimentier' mal mit der "Register"-Optimierungseinstellung.
-
Sorry, hatte nur den ersten Beitrag gelesen