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);
    };
    
    #endif
    

    FZliste.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);
    };
    
    #endif
    

    FZliste.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 Fall

    CFZbase* 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.


Anmelden zum Antworten