Conflicting declaration 'NOT_ASSIGNED'
-
Hey Leute,
ich habe in meinem Script zwei Enumerationen und möchte - vor Allem, weil mir kein anderer Bezeichner einfällt - die beiden Namen 'NOT_ASSIGNED' behalten.
Muss ich dafür Gebrauch von namespaces machen?Hier erstmal der Code:
enum TcpConnectionType { NOT_ASSIGNED, SERVER, CLIENT }; enum TcpConnectionState { NOT_ASSIGNED, ACTIVE, PAUSED, CLOSED };
Thx! DerCoder
-
DerCoder schrieb:
Muss ich dafür Gebrauch von namespaces machen?
Wäre eine Möglichkeit, ja.
-
Muss ich dafür Gebrauch von namespaces machen?
Entweder das oder ein struct bzw. eine class als Scope nehmen.
Bsp:
struct TcpConnectionType { enum value_type { NOT_ASSIGNED, SERVER, CLIENT }; };
-
Danke für die schnellen Antworten.
Da mir die zweite Variante besser gefällt, wollte ich die gerade umsetzen.
Leider musste ich einen Misserfolg verbuchen:Meine Klasse TcpConnection hat als Membervariablen zum Einen den Verbindungstyp und zum Anderen den Verbindungsstatus. Damit die beiden die richtigen Werte haben, wollte ich beiden 'NOT_ASSIGNED' per Konstruktor zuweisen:
TcpConnection::TcpConnection() { _tcpConnectionType = TcpConnectionType.NOT_ASSIGNED; _tcpConnectionState = TcpConnectionState.NOT_ASSIGNED; _ip = ""; _port = 0; _socket = INVALID_SOCKET; }
Die Fehlermeldung lautet: "expected primary-expression before '.' token"
-
theta schrieb:
Muss ich dafür Gebrauch von namespaces machen?
Entweder das oder ein struct bzw. eine class als Scope nehmen.
Bsp:
struct TcpConnectionType { enum value_type { NOT_ASSIGNED, SERVER, CLIENT }; };
Das geht seit einer Weile aber so:
enum class TcpConnectionType { NOT_ASSIGNED, SERVER, CLIENT };
-
Ethon schrieb:
Das geht seit einer Weile aber so:
enum class TcpConnectionType { NOT_ASSIGNED, SERVER, CLIENT };
Fehlermeldung: 'expected identifier before "class"' und 'ISO C++ forbids declaration of `NOT_ASSIGNED' with no type'.
Der letzte Fehler kommt für alle drei Enumerations-Felder.P.S.: Ich benutze von Bloodshed Dev-Cpp, liegt es daran?
-
Hallo,
Versuchs mal so
_tcpConnectionType = TcpConnectionType::NOT_ASSIGNED;
Der Code von Ethon geht nur wenn dein Compiler den neuen Standard beherrscht.
-
Braunstein schrieb:
Der Code von Ethon geht nur wenn dein Compiler den neuen Standard beherrscht.
Das wird er wohl nicht... Dev-Cpp ist nicht so pralle. Bin damit aber "groß geworden" und hänge daher bisschen daran, vor Allem, weil es bisher immer gereicht hat.
Danke für eure Tipps
Werde es mal mit einem manuellen Update von MinGW probieren oder gleich CodeBlocks laden.
Danke, DerCoder
-
Es gibt auch eine neue (Beta-)Version von Dev-C++ in dem der Uraltcompiler gegen einen getauscht wurde, der ziemlich standardkonform (C++98, nicht C++11!) ist.
-
@DerCoder: TcpConnectionType::NOT_ASSIGNED
@Ethon: Kommt wohl auf den Kompiler und seiner C++11 Unterstützung an.
-
Mit Code::Blocks wills auch nicht so ganz klappen:
Die scoped enums (enum class TcpConnectionType...) erzeugen eine Warnung. Das ist zwar nicht schlimm, stört mich aber!
'warning: scoped enums only available with -std=c++0x or -std=gnu++0x'Beide Varianten
_tcpConnectionType = TcpConnectionType.NOT_ASSIGNED; //error: expected primary-expression before '.' token _tcpConnectionState = TcpConnectionState.NOT_ASSIGNED; //error: expected primary-expression before '.' token
als auch
_tcpConnectionType = TcpConnectionType::NOT_ASSIGNED; //error: 'TcpConnectionType' is not a class or namespace _tcpConnectionState = TcpConnectionState::NOT_ASSIGNED; //error: 'TcpConnectionType' is not a class or namespace
funktionieren nicht!
-
Was hat _tcpConnectionType für ein Typ? Zeige die Dekl.
-
theta schrieb:
Was hat _tcpConnectionType für ein Typ? Zeige die Dekl.
TcpConnectionType _tcpConnectionType; TcpConnectionState _tcpConnectionState;
-
TcpConnectionType::value_type _tcpConnectionType;
-
Tut mir Leid, dass ich mich erst so spät melde. War bis eben arbeiten.
theta schrieb:
TcpConnectionType::value_type _tcpConnectionType;
Dann müsste ich doch diese Variante nehmen, oder?
struct TcpConnectionType { enum value_type { // .... }; };
Was mache ich denn gegen die Warnung "warning: scoped enums only available with -std=c++0x or -std=gnu++0x" und den Fehler "error: expected primary-expression before '.' token", wenn ich es mit enum class {}; machen möchte?
Ich persönlich finde einfach, dass es verwirrend(er) aussieht, wenn die Membervariable vom Typen TcpConnectionType::value_type ist.
-
DerCoder schrieb:
Mit Code::Blocks wills auch nicht so ganz klappen:
Die scoped enums (enum class TcpConnectionType...) erzeugen eine Warnung. Das ist zwar nicht schlimm, stört mich aber!
'warning: scoped enums only available with -std=c++0x or -std=gnu++0x'Du musst in den Compilereinstellungen Den Standard auf C++0x setzen.
-
Danke! Genau was ich gesucht habe