expected unqualified-id at end of input / ´ClPerson´does not name a type
-
Hallo zusammen,
ich habe im folgendem Programm zwei Fehler, deren Ursache ich einfach nicht herausfinde.
Zunächst wird die Klasse ClPerson nicht erkannt. Bei googlen habe ich herausgefunden, dass die includes in den headern falsch sind oder die Dateien in falscher Reihenfolge eingebunden sind. Nur woran liegts genau.
Das zweite Problem ist die Syntax in der main, wo die Klammersetzung oder ein Semikolon falsch gesetzt sind. Nur es fehlt offensichtlich keine Klammer, wo kann der Fehler noch liegen fehlendes Semikolon oder sowas?Ich danke für eure Hilfe!
using namespace std; #include <iostream> #include <fstream> #include <string.h> #include "person.h" #include "beziehung.h" int main() { char dateiname[100], kommando[64]; ClPerson *wurzel=NULL, *jetzt; ifstream STRpersonen; STRpersonen.open("personen.txt"); if (!STRpersonen) { cout << "Die Datei " << dateiname << " ist nicht lesbar." << endl; return 0; } ifstream STRbeziehungen, datei; cout << "Wie lautet die einzulesende Datei?" << endl; cin.getline(dateiname,'n'); datei.open(dateiname); STRbeziehungen.open("beziehungen.txt"); if (!STRpersonen) { cout << "Die Datei " << dateiname << " ist nicht lesbar." << endl; return 0; } wurzel=ladedaten(STRpersonen, STRbeziehungen); for (;;) { cout << "Was moechten Sie tun?" << endl << "p - Patenschaft anhand der Person herausfinden" << endl << "e - Programm beenden" << endl; cin.getline(kommando,64,'\n'); switch(kommando[0]) { case 'p': cout << "Bitte geben Sie den eindeutigen Identifikations-Code des Paten ein!" <<endl; cin.getline(kommando,64,'\n'); jetzt=sucheperson(wurzel,kommando); if (jetzt!=NULL) cout << " Die Person *" << wurzel->name <<"* besitzt die *" << wurzel->ordnungsnummer << "* mit der Identifikation *" << wurzel->identifikation << "*" << "." << endl; case 'e': return 0; default: cout << "Syntax " << kommando << " ERROR" << endl; break; } } }#ifndef BEZIEHUNG_H #define BEZIEHUNG_H #include "person.h" enum zustandBez {beiInit0, beiInit1, beiInit2, beiOrdnungsnummer, beiPate, beiPatenschaft}; class ClBeziehung { private: ClBeziehung *naechster; int ordnungsnummer; int pate; int anzahl; public: ClBeziehung *ladeBeziehungen(int, ifstream &STRbeziehungen); ClBeziehung *leseBeziehung(ifstream &STRbeziehungen); ClPerson *sucheperson(ClPerson *wurzel, char *bezeichnung); }; #endif // BEZIEHUNG_H#ifndef PERSON_H #define PERSON_H #include "beziehung.h" enum zustand {ordnum,name,identnum}; class ClPerson { private: ClBeziehung *wurzelBez; ClPerson *naechster; char name[100], identifikation[100]; int ordnungsnummer; public: ClPerson *ladedaten(ifstream &STRpersonen, ifstream &STRbeziehungen); ClPerson *ladeperson(ifstream &STRpersonen); #endif // PERSON_H
-
Bei der Klasse ClPerson fehlt dir eine schliessende Klammer und ein Semikolon:
#ifndef PERSON_H #define PERSON_H #include "beziehung.h" enum zustand {ordnum,name,identnum}; class ClPerson { private: ClBeziehung *wurzelBez; ClPerson *naechster; char name[100], identifikation[100]; int ordnungsnummer; public: ClPerson *ladedaten(ifstream &STRpersonen, ifstream &STRbeziehungen); ClPerson *ladeperson(ifstream &STRpersonen); }; // Hier fehlte eine Klammer und ein Semikolon #endif // PERSON_HVielleicht hats noch andere Fehler, habe nicht so genau geschaut.
-
Die schließende Klammer für class ClPerson fehlt...
-
Oh man, wieso sieht man den Wald vor lauter Bäumen eigentlich nicht????
Danke schonmal dafür
Fehler:‘ClPerson’ does not name a type
Trotzdem taucht das noch auf.... Sind möglicherweise die Deklarationen falsch?
-
Du hast zirkuläre Abhangigkeiten, person.h bindet beziehung.h ein (und nutzt auch die Beziehungsklasse) und so weiter. Google mal
Google: forward declaration c++
um zu sehen, wie man das behebt.Außerdem lege ich dir nahe, die ungarische Notation in einer Sprache wie C++ sein zu lassen.
-
Ok, das hat geklappt. Vielen Dank.
Was meinst du mit ungarischer Notation?
-
Erstmal
http://de.wikipedia.org/wiki/Ungarische_NotationDamit sich das Thema nicht wiederholt:
-
Diesen Link finde ich besser:
http://www.c-plusplus.net/forum/p1773551#1773551
Passt auch gut zum Threadersteller, der bereits bei zwei Initialen angekommen ist.
-
Ok, das macht Sinn. Da werde ich in Zukunft mal drauf achten.
Allerseits dann einen schönen Abend!