Statische Konstanten nur außerhalb von Klassen?
-
Hi,
ich möchte gerne für meine Klasse ein paar statische Konstanten anlegen, doch dies geht leider nur außerhalb der Klasse:
class fahrzeug { private: std::string name; public: fahrzeug (void) : name ("") {}; fahrzeug (std::string wert) : name (wert) {}; ~fahrzeug (void) {}; // Dinge die leider nicht gehen. :-( // static const fahrzeug lamborghini (255); // static const fahrzeug lamborghini = fahrzeug (255); // So gehts. static const fahrzeug porsche; }; const fahrzeug fahrzeug::porsche = fahrzeug ("porsche");Was muss ich tun, damit ich diese IN der Klasse definieren kann?
Danke euch vielmals und liebe Grüße
-
Sorry das 255 war aus einem anderen Test. So ist der Code aktuell:
class fahrzeug { private: std::string name; public: fahrzeug (void) : name ("") {}; fahrzeug (std::string wert) : name (wert) {}; ~fahrzeug (void) {}; // Dinge die leider nicht gehen. :-( // static const fahrzeug lamborghini ("lamborghini"); // static const fahrzeug lamborghini = fahrzeug ("lamborghini"); // So gehts. static const fahrzeug porsche; }; const fahrzeug fahrzeug::porsche = fahrzeug ("porsche");
-
In der Klasse geht das nicht.
-
Airdamn schrieb:
In der Klasse geht das nicht.
Gibt es ein Work-Around?
-
C++ - Coder schrieb:
Airdamn schrieb:
In der Klasse geht das nicht.
Gibt es ein Work-Around?
Nein, glaube nicht. Nur Integer-Variablen (int, short, char, long, signed, unsigned, ...) können in der Klasse direkt definiert werden.
Wenn ich mich recht erinnere, soll dazu allerdings eine Änderung mit dem neuen Standard kommen. Dachte hätte dazu mal etwas gelesen. Aber ohne Gewähr
Grüssli
-
Dravere schrieb:
C++ - Coder schrieb:
Airdamn schrieb:
In der Klasse geht das nicht.
Gibt es ein Work-Around?
Nein, glaube nicht. Nur Integer-Variablen (int, short, char, long, signed, unsigned, ...) können in der Klasse direkt definiert werden.
Statische Datenmember werden in einer Klasse stets nur deklariert. Auch eine dort initialisierte Konstante benötigt noch eine extra Definition, es sei denn, sie wird nur in Ausdrücken eingesetzt, die konstant sein müssen.
-
@camper,
Du meinst das hier, oder?class MyClass { public: static int const MY_INT = 0; }Also nur Integer-Variablen mit
const. Sobald es keinconsthat, muss auch die Integer-Variable ausserhalb initialisiert werden.
Mir ist das nämlich auch grad in den Sinn gekommen und wollte mich noch korrigieren, aber war wohl schon zu spät
Grüssli
-
@Dravere: alle integralen typen, also char, signed char, unsigned char, wchar_t, ..., short, ..., int, ..., long, ..., long long, ..., size_t, ptrdiff_t.