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


  • Mod

    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 🙂


Anmelden zum Antworten