Programm läuft nicht
-
Hallo,
ich versuche mich gerade bei der Programmierung mit C++.
Zu diesem Zweck, habe ich ein Bsp. Programm aus einem Buch abgeschrieben. Nur leider läuft es nicht.
Ich habe leider keine Ahnung warum.
Ich bekomme immer wieder folgende Fehlermeldungen:c:\Dokumente und Einstellungen\Desktop\Bsp.FZliste\FZliste.cpp(12) : error C2065: 'cout' : nichtdeklarierter Bezeichner c:\Dokumente und Einstellungen\Desktop\Bsp.FZliste\FZliste.cpp(12) : error C2296: '<<' : Ungültig, da der linke Operand vom Typ ''unknown-type'' ist c:\Dokumente und Einstellungen\Desktop\Bsp.FZliste\FZliste.cpp(12) : error C2297: '<<' : Ungültig, da der rechte Operand vom Typ 'char [14]' ist c:\Dokumente und Einstellungen\Desktop\Bsp.FZliste\FZliste.cpp(13) : error C2065: 'cin' : nichtdeklarierter Bezeichner(nur ein Auszug)
Ich dachte diese Dinge sind in der "iostream.h" deklariert.

Hier der Bsp.Code:
FZliste.h
#ifndef _FZLISTE #define _FZLISTE class CFZbase { protected: char m_Kennzeichen[10]; int m_Erstzulassung; public: CFZbase(char *k, int j); CFZbase(); virtual void Print(); virtual CFZbase *Copy()=0; char *Kennzeichen() {return m_Kennzeichen;} }; class CPKW : public CFZbase { int m_hubraum; int m_leistung; short m_schadstofftyp; public: CPKW(char *Knz, int j, int h, int l, short s=0):CFZbase(Knz, j), m_hubraum(h), m_leistung(l), m_schadstofftyp(s) {}; CPKW(); virtual void Print(); virtual CFZbase *Copy(); }; class CMotorrad : public CFZbase { int m_hubraum; public: CMotorrad(char *Kennz, int jahr, int h): CFZbase(Kennz, jahr) , m_hubraum(h) {}; CMotorrad(); virtual void Print(); virtual CFZbase *Copy(); }; class CLKW : public CFZbase { int m_AnzAchsen, m_Zuladung; public: CLKW(char *Kennz, int jahr, int A, int Z): CFZbase(Kennz, jahr) , m_AnzAchsen(A), m_Zuladung(Z) {}; CLKW(); virtual void Print(); virtual CFZbase *Copy(); }; class CNode { CFZbase *m_object; CNode *m_left, *m_right; int cmpNode(CNode *); public: CNode(CFZbase *obj) {m_object = obj->Copy(); m_left = m_right = NULL;} void Print(); CFZbase *Suchen(char *Kennzeichen); CNode *AddObject(CFZbase *obj); }; #endifFZliste.cpp
#include <iostream> #include "FZliste.h" inline CFZbase::CFZbase (char *k, int j) { strcpy(m_Kennzeichen, k); m_Erstzulassung = j; } CFZbase::CFZbase() { cout << "Kennzeichen: "; cin >> m_Kennzeichen; cout << "Jahr der Erstzulassung: "; cin >> m_Erstzulassung; } void CFZbase::Print() { cout << endl << m_Kennzeichen << endl; cout << "Erstzulassung:\t\t" << m_Erstzulassung << endl; } CPKW::CPKW() { cout << "Hubraum:\t\t"; cin >> m_hubraum; cout << "Leistung:\t\t"; cin >> m_leistung; cout << "Schadstoffklasse: [0..2]\t"; cin >> m_schadstofftyp; } void CPKW::Print() { static char *Klassen[3] = {"Sauber", "Dreckschleuder", "Diesel"}; CFZbase:: Print(); cout << "Typ: \t\t\tPKW\n"; cout << "Hubraum:\t\t" << m_hubraum << endl; cout << "Leistung:\t\t" << m_leistung << endl; cout << "Schadstoffklasse:\t\t" << Klassen[m_schadstofftyp] << endl; } CFZbase* CPKW::Copy() { return new CPKW(*this); } CMotorrad::CMotorrad() { cout << "Hubraum:\t\t"; cin >> m_hubraum; } void CMotorrad::Print() { CFZbase::Print(); cout << "Typ:\t\t\tMotorrad\n"; cout << "Hubraum:\t\t" << m_hubraum << endl; } CFZbase* CMotorrad::Copy() { return new CMotorrad(*this); } CLKW::CLKW() { cout << "Anzahl Achsen:\t\t"; cin >> m_AnzAchsen; cout << "max Zuladung:\t\t"; cin >> m_Zuladung; } void CLKW::Print() { CFZbase::Print(); cout << "Typ:\t\t\tLKW\n"; cout << "Anzahl Achsen:\t\t" << m_AnzAchsen << endl; cout << "max. Zuladung:\t\t" << m_Zuladung << endl; } CFZbase* CLKW::Copy() { return new CLKW(*this); } inline int CNode::CmpNode(CNode *node2) { return strcmp(m_object->Kennzeichen(),node2->m_object->Kennzeichen()); } CNode *CNode::AddObject(CFZbase *obj) { CNode *root = this; int inserted = 0; CNode *newnode = new CNode(obj); if (root == NULL) return newnode; do { if (root->CmpNode(newnode) > 0) { if (root->m_left == Null) { root->m_left = newnode; inserted = 1; } else root = root->m_left; } else { if (root->m_right == Null) { root->m_right = newnode; inserted = 1; } else root = root->m_right; } }while (inserted == 0); return this; } CFZbase *CNode::Suchen(char *Kennz) { int suchstatus = 1; CNode *Start = this; while (Start != NULL && suchstatus != 0){ suchstatus = strcmp(Kennz, Start->m_object->Kennzeichen()); if (suchstatus != 0) { if (suchstatus < 0) Start = Start->m_left; else Start = Start->m_right; } } if (suchstatus != 0) return Null; else return Start->m_object; } void CNode::Print() { if (m_left != NULL) m_left->Print(); m_object->Print(); if (m_right != 0) m_right->Print(); }main.cpp
#include <iostream> #include "FZliste.h" main() { char Cmd; CNode *root = NULL; do { cout << "Cmd: "; cin >> Cmd; switch (Cmd) { case 'p': root = root->AddObject(new CPKW); break; case 'm': root = root->AddObject(new CMotorrad); break; case 'l': root = root->AddObject(new CLKW); break; case 's': char kennz[10]; CFZbase *FZ; cin >> kennz; FZ = root->Suchen(kennz); if (FZ != NULL) FZ->Print(); break; case 'd': root->Print(); break; } } while (Cmd != 'x'); }Kann mir jemand weiterhelfen?
-
Nach den Headern
using namespace std;schreiben.
-
Erst mal:
Ich bezweifle, dass dir das was bringt, das abzuschreiben, wenn du nich ma die einfachsten Fehlermeldungen verstehst><Neuling2008 schrieb:
FZliste.h
#ifndef _FZLISTE #define _FZLISTE //so was tut man nicht... _X ist immer für den Compiler reserviert... also schreib halt FZLISTE_INCLUDE oder so... class CFZbase { protected: char m_Kennzeichen[10]; int m_Erstzulassung; public: CFZbase(char *k, int j); CFZbase(); virtual void Print(); virtual CFZbase *Copy()=0; char *Kennzeichen() {return m_Kennzeichen;} //keine const funktion? }; class CPKW : public CFZbase { int m_hubraum; int m_leistung; short m_schadstofftyp; public: CPKW(char *Knz, int j, int h, int l, short s=0):CFZbase(Knz, j), m_hubraum(h), m_leistung(l), m_schadstofftyp(s) {}; CPKW(); virtual void Print(); virtual CFZbase *Copy(); }; class CMotorrad : public CFZbase { int m_hubraum; public: CMotorrad(char *Kennz, int jahr, int h): CFZbase(Kennz, jahr) , m_hubraum(h) {}; CMotorrad(); virtual void Print(); virtual CFZbase *Copy(); }; class CLKW : public CFZbase { int m_AnzAchsen, m_Zuladung; public: CLKW(char *Kennz, int jahr, int A, int Z): CFZbase(Kennz, jahr) , m_AnzAchsen(A), m_Zuladung(Z) {}; CLKW(); virtual void Print(); virtual CFZbase *Copy(); }; class CNode { CFZbase *m_object; CNode *m_left, *m_right; int cmpNode(CNode *); public: CNode(CFZbase *obj) {m_object = obj->Copy(); m_left = m_right = NULL;} void Print(); //sollte auch ne const funktion sein!!! CFZbase *Suchen (char *Kennzeichen); //const... CNode *AddObject(CFZbase *obj); }; #endifFZliste.cpp
#include <iostream> #include "FZliste.h" using namespace std; //oder using std::cout, std::cin, std::endl; //oder einfach statt cout immer std::cout schreiben etc inline CFZbase::CFZbase (char *k, int j) //einen ctor inline machen? Oo { strcpy (m_Kennzeichen, k); //strcpy_s ! m_Erstzulassung = j; //so was gehört eigtl in die Initialisierungsliste } CFZbase::CFZbase() { std::cout << "Kennzeichen: "; std::cin >> m_Kennzeichen; std::cout << "Jahr der Erstzulassung: "; std::cin >> m_Erstzulassung; } void CFZbase::Print() { std::cout << "\r\n" << m_Kennzeichen << "Erstzulassung:\t\t" << m_Erstzulassung << std::endl; } CPKW::CPKW() { std::cout << "Hubraum:\t\t"; std::cin >> m_hubraum; std::cout << "Leistung:\t\t"; std::cin >> m_leistung; std::cout << "Schadstoffklasse: [0..2]\t"; std::cin >> m_schadstofftyp; } void CPKW::Print() { static char *Klassen[3] = {"Sauber", "Dreckschleuder", "Diesel"}; CFZbase:: Print(); cout << "Typ: \t\t\tPKW\n"; cout << "Hubraum:\t\t" << m_hubraum << endl; cout << "Leistung:\t\t" << m_leistung << endl; cout << "Schadstoffklasse:\t\t" << Klassen[m_schadstofftyp] << endl; } CFZbase* CPKW::Copy() { return new CPKW(*this); } CMotorrad::CMotorrad() { cout << "Hubraum:\t\t"; cin >> m_hubraum; } void CMotorrad::Print() { CFZbase::Print(); cout << "Typ:\t\t\tMotorrad\n"; cout << "Hubraum:\t\t" << m_hubraum << endl; } CFZbase* CMotorrad::Copy() { return new CMotorrad(*this); } CLKW::CLKW() { cout << "Anzahl Achsen:\t\t"; cin >> m_AnzAchsen; cout << "max Zuladung:\t\t"; cin >> m_Zuladung; } void CLKW::Print() { CFZbase::Print(); cout << "Typ:\t\t\tLKW\n"; cout << "Anzahl Achsen:\t\t" << m_AnzAchsen << endl; cout << "max. Zuladung:\t\t" << m_Zuladung << endl; } CFZbase* CLKW::Copy() { return new CLKW(*this); } inline int CNode::CmpNode(CNode *node2) { return strcmp(m_object->Kennzeichen(),node2->m_object->Kennzeichen()); } CNode *CNode::AddObject(CFZbase *obj) { CNode *root = this; int inserted = 0; CNode *newnode = new CNode(obj); if (root == NULL) return newnode; do { if (root->CmpNode(newnode) > 0) { if (root->m_left == Null) { root->m_left = newnode; inserted = 1; } else root = root->m_left; } else { if (root->m_right == Null) { root->m_right = newnode; inserted = 1; } else root = root->m_right; } }while (inserted == 0); return this; } CFZbase *CNode::Suchen(char *Kennz) { int suchstatus = 1; CNode *Start = this; while (Start != NULL && suchstatus != 0){ suchstatus = strcmp(Kennz, Start->m_object->Kennzeichen()); if (suchstatus != 0) { if (suchstatus < 0) Start = Start->m_left; else Start = Start->m_right; } } if (suchstatus != 0) return Null; else return Start->m_object; } void CNode::Print() { if (m_left != NULL) m_left->Print(); m_object->Print(); if (m_right != 0) m_right->Print(); }main.cpp
#include <iostream> #include "FZliste.h" main() { char Cmd; CNode *root = NULL; do { cout << "Cmd: "; cin >> Cmd; switch (Cmd) { case 'p': root = root->AddObject(new CPKW); break; case 'm': root = root->AddObject(new CMotorrad); break; case 'l': root = root->AddObject(new CLKW); break; case 's': char kennz[10]; CFZbase *FZ; cin >> kennz; FZ = root->Suchen(kennz); if (FZ != NULL) FZ->Print(); break; case 'd': root->Print(); break; } } while (Cmd != 'x'); }Und die Copy-Funktionen würde ich als inline definieren...
Verstehst du das, was du dort abgeschrieben hast oder nicht?
bb
-
Neuling2008 schrieb:
Ich dachte diese Dinge sind in der "iostream.h" deklariert.

Nexus schrieb:
Nach den Headern
using namespace std;schreiben.Nein, sich mit dem Standard und Namespaces auseinandersetzen...
cheers, Swordfish
-
Swordfish schrieb:
unskilled schrieb:
Ich dachte diese Dinge sind in der "iostream.h" deklariert.

Nexus schrieb:
Nach den Headern
using namespace std;schreiben.Nein, sich mit dem Standard und Namespaces auseinandersetzen...
cheers, Swordfish
1. falsch gequotet - das war nicht ich, der das gefragt / gesagt hat...
2. seh ich aber genau so...bb
-
unskilled schrieb:
1. falsch gequotet - das war nicht ich, der das gefragt / gesagt hat...
Sorry. Korrigiert.
cheers, Swordfish
-
Ach ja, und ein passender Titel wäre nächstes Mal auch angebracht. Dass ein Programm nicht läuft, ist sehr oft der Fall

-
CFZbase *Suchen(char *Kennzeichen); //const...Aufpassen!
Entweder 2x const:CFZbase const* Suchen(char* Kennzeichen) const;oder garkein const. Oder beide Varianten (const overload).
Aber auf keinen FallCFZbase* Suchen(char* Kennzeichen) const;Zumindest nicht so ohne weiteres, also ohne sich zu überlegen was die Folgen wären.
-
Danke - daran hatte ich gar ne gedacht ><
bb
-
Bin ich blind oder ist das Verhältnis von new zu delete etwas deutlich zu groß?
-
Wenn du einen Doppelklick auf die Fehlermeldung machst, dann springt der "Compiler" in Zeile. Vielleicht hilft dir das, die Fehler in Zukunft besser zu interpretieren.