komische Fehlermeldung



  • Ich hab da mal eine Frage!

    Und zwar habe ich ein Programm geschrieben, in dem ich die Class CEventWindow deklariere als Variable m_EventWindow

    private:
    ...
    CEventWindow m_EventWindow;
    ...
    

    eigentlich funktioniert(e) das auch, aber nun bekomme ich ab und zu die Fehlermeldungen:
    syntax error: missing ';' before identifier 'm_EventWindow'
    'CEventWindow': missing storage-class or type specifiers
    'm_EventWindow': missing storage-class or type specifiers

    Das komische ist, wenn ich die declarierung auskommentiere und das projekt nochmal builden lasse und danach die kommentierung wieder rausnehme und nochmal builden lasse funktioniert es (meistens) wieder. Bis nach ein paar Mal wieder die Fehlermeldungen auftauchen....hat jemand ne Idee???

    Ich benutze Visual Studio 6.0 und kann nicht auf eine neuere Version umsteigen!


  • Mod

    Die Klasse CEventWindow ist Deinem Compiler nicht bekannt, weil Du vermutlich vergessen hast die entsprechende Headerdatei einzubinden.



  • Hey Martin!
    Danke fuer die Antwort!

    ich habe in meinem Code die

    #include "EventWindow.h"
    

    drin! Dazu kommt noch, dass ich die Klasse mit dem Assistenten hinzugefuegt habe und das ja somit eigentlich automatisch gelaufen ist... ich hab's aber auch nochmal kontrolliert!
    😞

    Weitere Ideen warum die Fehlermeldungen auftauchen??



  • Ich habe jetzt nochmal ein wenig weiter getestet und es wird immer komischer....

    Wenn die Fehlermeldungen auftauchen

    syntax error: missing ';' before identifier 'm_EventWindow'
    'CEventWindow': missing storage-class or type specifiers
    'm_EventWindow': missing storage-class or type specifiers

    Muss ich die Zeile

    CEventWindow m_EventWindow;
    

    einmal auskommentieren, dann rebuild, dann kommen natuerlich noch mehr fehler, dann die Kommentarstriche wieder weg und es funktioniert!
    Wenn ich dann was im Code aendere muss ich diesen "Trick" nach 3-5 mal problemlosen Rebuilding wieder anwenden....

    Aber das kann ja wohl nicht die Loesung sein....ich bin ziemlich ratlos 😞


  • Mod

    Glaube ich nicht...
    Liegt CEventWindow evtl. in einem Namespace?
    Hast Du den include mit Sicherheit vor der Benutzung.

    Was passiert wenn Du über die Verwendung einfach mal

    class CEventWindow;
    

    setzt?



  • Danke fuer deinen Vorschlag! Ich habe ihn ausprobiert, aber es passiert das gleiche!

    Ich erklaer am besten nochmal genau, wie meine auflistung ist! (Leider kann ich den Code nicht posten, da ich an einem anderen Rechner arbeite)

    Also in meiner Klasse, die beim Programmstart aufgerufen wird steht die

    #include "EventWindow.h"  // Added by ClassView
    

    drin

    Weiter unten bei der Variablendeklarierung steht drin

    ... 
    private:
     ...
     CEventWindow m_EventWindow;
     ...
    };
    

    Diese Klasse erzeugt mein Hauptfenster und mein zweites (Event-)Window. In dem Hauptfenster ist ein Button, mit dem ich das zweite Fenster oeffnen kann

    void HauptwindowClassDlg::OnOpenEditScreen2()
    {
       m_EventWindow.ShowWindow(SW_SHOW); 
    }
    

    die dazugehoerige Klasse ist CEventWindow!

    Beim Testen ist mir aufgefallen, dass ich selber nicht "Rebuild" druecke sondern nach einer Codeaenderung immer F5 druecke, aber dann wird doch automatisch "Rebuild" ausgefuehrt oder?!
    Wenn die Fehlermeldungen (
    syntax error: missing ';' before identifier 'm_EventWindow'
    'CEventWindow': missing storage-class or type specifiers
    'm_EventWindow': missing storage-class or type specifiers
    )
    kommen, kommentiere ich die Deklarierung raus

    ... 
    private:
     ...
     //CEventWindow m_EventWindow;
     ...
    };
    

    druecke auf F5
    bekomme 5 Fehlermeldung, weil er Anweisungen wie

    m_EventWindow.ShowWindow(SW_SHOW)
    

    nicht mehr ausfuehren kann
    dann nehme ich die Kommentierung wieder raus, druecke F5 und es funktioniert ohne Fehler....und das is immer so!

    Das ist doch nicht ganz normal, oder?! 😕 😕 😕



  • Kann es evtl. mit Precompiled Headers zusammenliegen (oder der Funktion halt, dass nur die veränderten C++ Dateien kompiliert werden)? Achte evtl. mal darauf, welche Dateien du veränderst, und bei welcher Datei der Fehler wieder kommt.

    Wie ist es, wenn du die Membervariable als Zeiger definierst und das CEventWindow Objekt im Konstruktor/Destruktor erstellst?


  • Mod

    Kann es sein, dass Du den include vor den include der stdafx.h gesetzt hast?



  • Vielen Dank erstmal fuer eurer Hilfe!!!

    Gugi schrieb:

    Kann es evtl. mit Precompiled Headers zusammenliegen (oder der Funktion halt, dass nur die veränderten C++ Dateien kompiliert werden)? Achte evtl. mal darauf, welche Dateien du veränderst, und bei welcher Datei der Fehler wieder kommt.

    Wie ist es, wenn du die Membervariable als Zeiger definierst und das CEventWindow Objekt im Konstruktor/Destruktor erstellst?

    Ja also beim druecken von F5 wird wohl nur ein Teil der Dateien neu kompiliert. Wenn ich "Rebuild All" funktioniert es nicht mit "Auskommentieren, Kommentierung wegnehmen, laeuft"

    Wie mache ich das mit der Zeigerdefinition. Lang, lang ist's her, dass ich das gelernt habe und dann war's das auch "nur" in C!

    Die Deklarierung aendern in:

    CEventWindow *m_EventWindow;
    

    und dann?! Speicherreservieren mit malloc und so?!

    Die include steht nicht vor der stdafx.h! Bzw. in meiner Hauptheaderdatei steht gar kein stdafx.h. Auch wenn ich's selber dazu schreibe klappt's nicht!
    😞


  • Mod

    Dann hast Du in jedem Fall ein Problem mit der Deklaration Deiner Klassen.
    Schieb mal das Projekt irgendwohin woi man es herunter laden kann.


Anmelden zum Antworten