Compiler meldet: "an anonymous union cannot have function members " und andere Dinge...



  • Ich hab ein Klasse geschrieben und wollte diese jetzt in einem Hauptprogramm testen.

    Diese Klasse ist so aufgebaut:

    #ifndef LocalConnection
    #define LocalConnection
    
    class LocalConnection
    {
          public:
                 LocalConnection();
                 ~LocalConnection();
                 static int Connect( char* );
                 static int Send( char* , char* );
                 static int Close();
                 static int Domain( char* );
                 static int onStatus();
    
          private:
    
                  static int   showListeners  ( void              );
                  static int   checkListener  ( void              );
                  static void  readMessage    ( void              );
                  static int   writeAMFString ( char* , int       );
                  static int   writeMessage   ( const char*       ); 
                  static void  sendMessage    ( char*             );   
    };
    
    #endif
    

    Wenn ich jetzt in der main eine Instanz der Klasse erzeugen will, kommen folgende Fehler, die auf die Datei "LocalConnection.hpp" verweisen:

    LocalConnection.hpp: expected unqualified-id before ')' token
    (Zeigt auf die Zeile wo der Konstruktor steht)

    LocalConnection.hpp: expected class-name before '(' token
    (Zeigt auf die Zeile in der der Destruktor steht)

    LocalConnection.hpp: an anonymous union cannot have function members
    (Zeigt auf die "{" )

    LocalConnection.hpp: abstract declarator `<anonymous class>' used as declaration

    und

    LocalConnection.hpp: namespace-scope anonymous aggregates must be static
    ( Zeigen beide auf die "}" )

    Kann ja sein das das eventuell ein Anfängerfehler ist aber ich weis wirklich nicht was der Compiler von mir will.
    (ich nutze Dev C++ 4.9.9.2)

    mfg rendner



  • Du definierst LocalConnection als Präprozessorsymbol ohne Inhalt. Damit bekommt der Compiler

    class {
    public:
      ();
      ~();
    };
    

    Also ich würd mich auch beschweren 😃

    EDIT:
    Hups garnicht aufgefallen.
    Könnte natürlich auch daran liegen dass ANSI C keine Klassen kennt :p



  • Oh man, das verstehe ich nicht...
    Wie kann ich den meinem Compiler sagen das er Klassen kennen soll, ich also dann nicht in ANSI C programmieren will.

    Und was muss ich an den Konstruktor und Destruktor ändern damit die funktionieren, bin eigentlich der Meinung das ich das in C schon immer so gemacht hatte.

    mfg rendner



  • Um C++ zu programmieren brauchst Du nen C++ Compiler. Hier ist das ANSI C Forum, da wird nicht über C++ geredet. Ob Du einen C++ Compiler hast, weiss ich nicht.

    Ansonsten musst Du verhindern dass der Präprozessor dir das Wort LocalConnection löscht! (Vielleicht, möglicherweise, aber auch nur eventuell, indem man das Präprozessorsymbol nicht wie die Klasse nennt)



  • rendner schrieb:

    Oh man, das verstehe ich nicht...

    Ist doch ganz einfach. Dein Includewächtersymbol heißt genauso wie deine Klasse. Das bewirkt, dass der Präprozessor deinen Klassennamen vor dem Compilieren aus dem Code löscht.

    Du musst dein Includewächtersymbol so benennen, dass es nicht zu Namenskonflikten mit irgendwelchen Bezeichnern in deinem Code kommt.



  • LordJaxom schrieb:

    (Vielleicht, möglicherweise, aber auch nur eventuell, indem man das Präprozessorsymbol nicht wie die Klasse nennt)

    *rofl* 😃



  • Man bin ich blöd :D...Danke, hab da gar nicht drauf geachtet.

    mfg rendner


Anmelden zum Antworten