was ist an klassendefinition falsch?
-
Hallo nochmal,
ich habe nun meine Klasse ergänzt um:
//define a list to store all expressions static ASTExpression expressionList[DSM_EXPRESSION_CNT_MAX]; //this index points to the next free element in the storage static size_t expressionlistIndex = 0;sowie
/** * Overload the new operator to simulate dynamic memory allocation. */ static void* ASTExpression::operator new (size_t size){ if(expressionlistIndex + size > DSM_EXPRESSION_CNT_MAX){ throw bad_alloc(); }//End if else { expressionListIndex += size; return expressionList + expressionListIndex - size; }//End else }//End operator newAllerdings bekomme ich als Fehler:
In file included from source/tinyDSMMain.cpp:12: source/ast/astexpression.h:118: Fehler: ISO-C++ verbietet Initialisierung des nicht konstanten statischen Elements »expressionlistIndex« in der KlasseAber den Index auf den Speicher muß ich doch global initialisieren, da er ja für alle Objekte gilt. Wo ist mein Denkfehler????
Danke nochmal.
Uwe
-
Die Initialisierung der statischen Elemente muss außerhalb der Klasse (in der cpp) erfolgen. Genau das sagt der Compiler ja auch.
-
static size_t expressionlistIndexProbier' es mit
size_t ASTExpression::expressionlistIndex = 0;in der Cpp-Datei.
-
Hi,
ah, so gehts! Fein. Jetzt habe ich nur noch nen letztes Problem. Ich bekomme in der Zeile:
return expressionList + expressionListIndex - size;folgenden Fehler:
/source/ast/astexpression.cpp:179: undefined reference to `AST::ASTExpression::expressionList'
Was mach ich den falsch (expressionlist habe ich nochmal umbenannt nach expressionList)? Noch nen Tipp??
Uwe
-
ASTExpression::expressionList ist ja ebenfalls static. Du hast es bisher nur deklariert (in der Klassendeklaration). Du brauchst auch hier noch eine Definition in der cpp.
-
Hi zum letzten ;),
nun habe ich in der .h:
//define a list to store all expressions static ASTExpression expressionList[DSM_EXPRESSION_CNT_MAX]; //this index points to the next free element in the storage static size_t expressionListIndex;und in der .cpp:
//init the static counter for the simulated dynamic storage allocation size_t ASTExpression::expressionListIndex = 0; ASTExpression ASTExpression::expressionList[DSM_EXPRESSION_CNT_MAX];Ist das nicht doppeltgemommelt bzgl. der expressionList???
Uwe
-
Nein, wieso denn?
Das Erste ist doch nur eine Deklaration in der Klasse. Da die Variable static ist, gehört sie ja nicht zur Klasse und es wird somit auch kein Speicher dafür mit vereinbart. Das machst du durch die Definition in der cpp selbst.
siehe auch
http://tutorial.schornboeck.net/staticmember.htm
-
Hallo,
ok ok. Habe ich glaube ich verstanden. Dann sage ich mal *close*. Hehe. Vielen Dank für Eure Hilfe.
Uwe