Konstante Klassenattribute
-
Hi @all,
Seit c++11 ist es möglich konstante Klassenattribute zu definieren.
Dieses nette Feature wollte ich für mein Projekt nutzen, jedoch stoße ich auf einen bemerkenswerten Fehler, welchen ich mir nicht erklären kann.
folgender Code:
#include<string> using namespace std; class test { public: test() :foo( a ) {} string foo; private: const string a = "Hallo"; }; int main(int argc , char** argv) { test bar; return 0; }schmeißt mich bei der Konstruktion des Objektes raus ( wirft eine bad_alloc exception ).
Da ich im Projekt mit GUI arbeite, habe ich es zuerst auf die GUI-Bibliothek geschoben, aber selbst bei dem obigen simplen Beispiel tritt der Fehler auf, warum ist das so, bzw. was mache ich falsch?PS: Wenn man sich jetzt fragt, warum man ein privaten konstatnten String deklariert, um ihn dann in einen public string zu packen, sollte man bedenken, dass das obige Bsp. nur dazu dient, das Problem zu verdeutlichen, im eigentlichen Projekt macht die Verwendung natürlich Sinn!
mfG
Hlymur
-
Die member werden in der Reihenfolge Ihrer Deklaration in der Klassendefinition initialisiert.
D.h. foo, vor a.
Dann ist's natürlich Essig mit Deiner Initialisierung.class test { const string a = "Hallo"; public: test() :foo( a ) {} string foo; };
-
Hlymur schrieb:
Seit c++11 ist es möglich konstante Klassenattribute zu definieren.
Das ging schon immer. Neu ist bloss dass man die Dinger direkt in der Klassendeklaration initialisieren kann.
Und ein kleiner Tip: wenn
aeh für alle Instanzen immer den selben Wert hat, dann mach esstatic.
-
Danke für die schnellen Antworten

-
Das ging schon immer.
Und war schon immer Schwachsinn.
-
Arcoth schrieb:
Das ging schon immer.
Und war schon immer Schwachsinn.
Versuch mal mit einem Konstanten Member ein paar Operatoren zu schreiben. Ich halte Konstante Klassenattribute für kleine Fallen die gerne irgendwann zuschnappen und dann für viel Tipparbeit sorgen.
-
Arcoth schrieb:
Das ging schon immer.
Und war schon immer Schwachsinn.
Ach du bist ja so schlau und erfahren.
Spar's dir bitte einfach das nächste mal, ja?