Eine nette Compilermeldung
-
Hallo zusammen,
ich bin mal wieder hilflos. Wahrscheinlich ist es wieder ein dummer Fehler, aber ich komm nicht weiter.
Meine Headerdatei:#pragma once ... #include "RuhrgebietsQuizPrg.h" class CQuestion { public: //Konstruktor CQuestion(void); //Destruktor ~CQuestion(void); ... // Instanz von CRuhrgebietsQuizPrg CRuhrgebietsQuizPrg prg; ... };
Des Compilers Meldung:
Kompilieren... RuhrgebietsQuizPrg.cpp f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(22) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'prg' f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(22) : error C2501: 'CQuestion::CRuhrgebietsQuizPrg': Fehlende Speicherklasse oder Typspezifizierer f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(22) : error C2501: 'CQuestion::prg': Fehlende Speicherklasse oder Typspezifizierer Ruhrgebiets Quiz 2.cpp f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(22) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'prg' f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(22) : error C2501: 'CQuestion::CRuhrgebietsQuizPrg': Fehlende Speicherklasse oder Typspezifizierer f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(22) : error C2501: 'CQuestion::prg': Fehlende Speicherklasse oder Typspezifizierer QuestionDlg.cpp f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(22) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'prg' f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(22) : error C2501: 'CQuestion::CRuhrgebietsQuizPrg': Fehlende Speicherklasse oder Typspezifizierer f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(22) : error C2501: 'CQuestion::prg': Fehlende Speicherklasse oder Typspezifizierer ... f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(22) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'prg' f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(22) : error C2501: 'CQuestion::CRuhrgebietsQuizPrg': Fehlende Speicherklasse oder Typspezifizierer f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(22) : error C2501: 'CQuestion::prg': Fehlende Speicherklasse oder Typspezifizierer
Bei der nächsten Datei genau das gleiche Problem.
Ich hab schon alles mögliche ausprobiert.Jonny
-
Das liegt womöglich an einem Fehler in dem eingebundenen Header - hast du die Klassendeklaration von CRuhrgebietsQuizPrg ordnungsgemäß mit einem ; beendet?
(und stimmt die Schreibweise hier auch mit der Deklaration überein?)
-
Hab ich alles schon x-mal überprüft, obwohl die Headerdatei auch automatisch erzeugt wurde. Ich versteh das einfach nicht...
Eingebettet in eine Funktion funktioniert es super:void CMainDlg::OnBnClickedNewgamebn() { CRuhrgebietsQuizPrg prg; prg.NewGame(); }
-
Du hast nicht zufällig in RuhrgebietsQuizPrg.h eine Includedirektive auf Question.h?
-
So, ich hab jetzt alle includes nochmal neu gemacht.
Das sieht jetzt so aus:------ Erstellen gestartet: Projekt: Ruhrgebiets Quiz 2, Konfiguration: Debug Win32 ------ Kompilieren... RuhrgebietsQuizPrg.cpp f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(20) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'prg' f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(20) : error C2501: 'CQuestion::CRuhrgebietsQuizPrg': Fehlende Speicherklasse oder Typspezifizierer f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(20) : error C2501: 'CQuestion::prg': Fehlende Speicherklasse oder Typspezifizierer Ruhrgebiets Quiz 2.cpp f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(20) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'prg' f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(20) : error C2501: 'CQuestion::CRuhrgebietsQuizPrg': Fehlende Speicherklasse oder Typspezifizierer f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(20) : error C2501: 'CQuestion::prg': Fehlende Speicherklasse oder Typspezifizierer QuestionDlg.cpp f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(20) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'prg' f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(20) : error C2501: 'CQuestion::CRuhrgebietsQuizPrg': Fehlende Speicherklasse oder Typspezifizierer f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(20) : error C2501: 'CQuestion::prg': Fehlende Speicherklasse oder Typspezifizierer Question.cpp f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\RuhrgebietsQuizPrg.h(15) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'q' f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\RuhrgebietsQuizPrg.h(15) : error C2501: 'CRuhrgebietsQuizPrg::CQuestion': Fehlende Speicherklasse oder Typspezifizierer f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\RuhrgebietsQuizPrg.h(15) : error C2501: 'CRuhrgebietsQuizPrg::q': Fehlende Speicherklasse oder Typspezifizierer MainDlg.cpp f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(20) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'prg' f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(20) : error C2501: 'CQuestion::CRuhrgebietsQuizPrg': Fehlende Speicherklasse oder Typspezifizierer f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\Question.h(20) : error C2501: 'CQuestion::prg': Fehlende Speicherklasse oder Typspezifizierer Answer.cpp f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\RuhrgebietsQuizPrg.h(15) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'q' f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\RuhrgebietsQuizPrg.h(15) : error C2501: 'CRuhrgebietsQuizPrg::CQuestion': Fehlende Speicherklasse oder Typspezifizierer f:\Programmieren\MFC\Ruhrgebiets Quiz 2\Ruhrgebiets Quiz 2\RuhrgebietsQuizPrg.h(15) : error C2501: 'CRuhrgebietsQuizPrg::q': Fehlende Speicherklasse oder Typspezifizierer Generieren von Code...
Und die Header:
#pragma once #include "RuhrgebietsQuizPrg.h" class CQuestion { public: //Konstruktor CQuestion(void); //Destruktor ~CQuestion(void); // Erstellt Dateipfad CString GetFile(); // Liest Text ein CString GetText(CString path = ""); // Stoppt die Zeit double GetTime(void); // Stellt eine neue Frage void NewQuestion(void); // Instanz von CRuhrgebietsQuizPrg CRuhrgebietsQuizPrg prg; // Speichert Fragen und Antworten CString question[6]; };
#pragma once #include "Question.h" #include "User.h" class CRuhrgebietsQuizPrg { public: CRuhrgebietsQuizPrg(void); ~CRuhrgebietsQuizPrg(void); // Startet das Hauptmenü void StartMainDlg(void); // Startet ein neues Spiel void NewGame(void); // Instanz von CQuestion CQuestion q; // Instanz von CUser CUser game; };
-
Zunächst mal binden sich RuhrgebietsQuizPrg.h und Question.h gegenseitig ein. Das hat nicht den von dir gewünschten Effekt.
Aber du hast ein grundsätzliches Designproblem: CQuestion enthält ein CRuhrgebietsQuizPrg-Objekt, das wiederum ein CQuestion-Objekt, dieses wieder ein CRuhrgebietsQuizPrg-Objekt und so weiter, ad infinitum.
Vielleicht gehst du nochmal zurück zur Designphase und legst genau fest, wieviele Objekte es von welchen Klassen gibt, und welches Objekt welches enthält. So geht's jedenfalls nicht. Vermutlich kannst du das mit Zeigern oder Referenzen lösen, dann brauchst du auch eine der Includedirektiven nicht mehr. Für Zeiger und Referenzen reicht auch eine Vorwärtsdeklaration.
-
-
Hab das ganze nochmal auseinandergefleddert und den Programmablauf Schritt für Schritt neu gemacht. Jetzt funktioniert es alles und ich brauch nicht zig includes. Danke an alle!