error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'testing'



  • ich hab in der einen .h datei eine klasse namens sockthread, in einer anderen .h datei ein array (oder nur eine variable) mit objekten dieser klasse.
    jede header datei includet die andere.
    ich bekomme aber jedesmal einen fehler den ich nicht nachvollziehen kann.

    SockThread testing;
    

    dann kommen diese fehler:

    1>c:\users\maxim\documents\visual studio 2010\projects\chatsrv\chatsrv\peerstate.h(20): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'testing'
    1>c:\users\maxim\documents\visual studio 2010\projects\chatsrv\chatsrv\peerstate.h(20): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    

    was für fehlendes ';' ?!

    hab extra noch ne andere .h datei mit der klasse "test" gemacht, mit der klasse funktioniert das dann. hat jemand ne idee?



  • Nikolei schrieb:

    jede header datei includet die andere.

    Well, there's your problem... 🙄



  • ich hab aber das mit dem ifned und endif gemacht...
    ich hatte da in der main.cpp ein array mit objekten dieser klasse wo sie drauf zugreifen muss, es meinte aber immer nichtdeklarierter bezeichner, dann hab ich das array in ne header datei gemacht. beides geht wohl nicht.



  • ich verstehs nicht...
    ich hab diese methode für den thread:

    static  DWORD WINAPI ThreadFunc(LPVOID data)
    

    dann will ich diese for schleife aufrufen:

    for(int i=0; i<peercnt; i++)
    
    int peercnt=0;
    

    peercnt ist ein int in der main, egal ob ich es static mache oder nicht.
    es kommt einfach immer die fehlermeldung

    error C2065: 'peercnt': nichtdeklarierter Bezeichner
    


  • Ist ja klar, wenn die Variable in main deklariert ist, dann kannst du in ThreadFunc nicht drauf zugreifen. Warum sollte das auch gehen? Das ist ja der Sinn von Scopes.
    Entweder du machst die Variable Global (nicht empfohlen), oder du gibst bei CreateThread einen Pointer auf deine Variable mit, der dann in data stehen würde (du müsstest halt noch von void* (== LPVOID) nach int* casten).



  • Nikolei schrieb:

    ich hab aber das mit dem ifned und endif gemacht...

    Und? Include Guards schützen gegen Mehrfachdefinitionen, dein Problem ist eine zirkuläre Abhängigkeit. In dem Fall sind die Include Guards sogar überhaupt erst für die konkrete Fehlermeldung verantwortlich, die du erhältst. Denk dir mal genau durch, wie der Include Prozess mit deinen Headern abläuft...



  • ich geb bei data schon den pointer auf nen socket mit.

    wieder die fehlermeldung ganz vom anfang.
    ich hab in der header datei wo SockThread definiert ist ein par static objekte eingefügt

    static	SockThread peers[MAX_PEERS];
    static int peercnt=0;
    

    das befindet sich außerhalb der klasse.

    jetzt kommt wieder das:

    1>c:\users\maxim\documents\visual studio 2010\projects\chatsrv\chatsrv\sockthread.h(16): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'peers'
    1>c:\users\maxim\documents\visual studio 2010\projects\chatsrv\chatsrv\sockthread.h(16): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    


  • Hast du die vor der Klassendeklaration eingefügt, oder danach? Außerdem definiert man keine globalen Variablen im Header, weil es, wenn mehrere *.cpp-Dateien diesen Header inkludieren und zusammen gelinkt werden kracht. Gewöhnlich deklariert man im Header mit extern die Variable und definiert sie dann in einer *.cpp-Datei definiert.

    Zum Parameter der Thread-Funktion: Bau dir einfach eine Struktur, die die Sachen die du brauchst enthält, und übergib dann einen Pointer auf Instanzen dieser Struktur.


Log in to reply