Objekte - Konstruktor: Komme nicht weiter



  • Hallo liebe Leute,
    ich habe folgende Aufgabe bekommen und weiß nicht weiter:

    a) Implementieren Sie eine Klasse Pkw nach folgenden Angaben.
    ·Definieren Sie dazu Datenelemente marke vom Typ char *, fgstnr (Fahrgestellnummer) vom Typ unsigned long und leistung vom Typ unsigned int.
    ·Implementieren Sie einen Konstruktor, der die angegebenen Datenelemente initialisiert. Geben Sie für marke und leistung die Defaultwerte “Mercedes“ und 100 an. Der Konstruktor gibt die Meldung aus:
    “Pkw der Marke xxx mit Fahrgestellnummer yyy und Leistung zzz erzeugt “
    Dabei sollen in die Ausgabe jeweils die tatsächlichen Werte eingesetzt werden.
    ·Geben Sie Methoden zum Lesen und Schreiben (falls möglich) der Datenelemente an und setzen Sie die Zugriffsrechte geeignet.
    b)Schreiben Sie eine Funktion main(), die ein Pkw-Objekt p1 mit Marke Beetle, der Fahrgestellnummer 1001 und Leistung 115 definiert. Anschließend wird die Belegung der Datenelemente von p1 ausgegeben.

    Hier mein geschriebener Quelltext:
    pkw.cpp

    #include <iostream>
    #include <cstring>
    #include "pkwdef.h"
    
    using namespace std;
    
    //int pkw::eingabe(int anzahl);
    //int pkw::ausgabe(pkw *ar, int groesse);
    
    pkw::pkw(char *marke, unsigned long fgstnr, unsigned int leistung){ //Konstruktor
    	pkwobj.marke="mercedes";
    	pkwobj.fgstnr=0;
    	pkwobj.leistung=100;
    	cout << "Standardinitialisierung erfolgt" << endl;
    	cout << "Pkw der Marke" << marke;
    	cout << "mit Fahrgestellnummer" << fgstnr;
    	cout << "und Leistung" << leistung;
    	cout << "erzeugt." << endl;
    }
    
    int pkw::eingabe(int anzahl)
    {
    	int i;			//Lokale Variablen
    	char marke;
    	int fgstnr;
    	int leistung;
    
    	for (i=0; anzahl < i; i++){
    		cout << "Datensatz " << i ;
    		cout << "von" << anzahl;
    		cout << "wird eingelesen" << endl << endl;
    		cout << "Marke: " << endl;
    		cin >> marke;
    		cout << "Fahrgestellnr: " << endl;
    		cin >> fgstnr;
    		cout << "Leistung: " << endl;
    		cin >> leistung;
    		cout << endl << "Objekte werden auf Heap erzeugt ..." << endl;
    		pkw *pointer;
    		pointer = new pkwobj[anzahl];
    		strncpy(pkw[i].marke,marke);
    		pkw[i].fgstnr=fgstnr;
    		pkw[i].leistung=leistung;
    	}
    	return(*pointer);
    }
    
    int pkw::ausgabe(pkw *ar, int groesse)
    {
    	int i = 0;
    	cout << "Datensätze werden ausgegeben: " << endl << endl;
    	while (i<=(groesse -1))
    		cout << ar[i] << endl;
    		i++;
    	cout << "Fertig";
    }
    
    void main ()
    {
    	int anzahl, i, *p, ausg;
    	cout << "Wieviele Datensaetze sollen eingelesen werden ?" << endl << "Anzahl: ";
    	cin >> anzahl;
    
    	cout << "Dateneingabe: Nutzen / Aufruf der Funktion eingabe" << endl;
    	p = eingabe(anzahl);
    
    	cout << "Datenausgabe: Nutzen / Aufruf der Funktion ausgabe" << endl;
    	ausg = ausgabe(p, anzahl);	
    }
    

    Und die Header Datei:
    pkw.h

    class pkw{
    	private:
    		char* marke;
    		unsigned long fgstnr;
    		unsigned int leistung;
    
    	public:
                   //Konstruktor und Destruktor
    		pkw(char *marke, unsigned long fgstnr, unsigned int leistung); 
    		~pkw();
    
    		int eingabe(int anzahl);
    		int ausgabe(pkw *ar, int groesse);
    
    };
    

    Kann mir jemand einen Tip geben? Wäre sehr dankbar.

    Vielen Dank in voraus.



  • Frage vergessen? 😃



  • _matze schrieb:

    Frage vergessen? 😃

    Ne. Frage formulieren ist schwierig. Der Compiler meldet eben Fehler. Kurz es läuft nicht. Und ich find den/die Fehler einfach nicht. Vielleicht hab ich ja wirklich n groben Bock geschossen und merks net ^^.



  • Fiend schrieb:

    _matze schrieb:

    Frage vergessen? 😃

    Ne. Frage formulieren ist schwierig. Der Compiler meldet eben Fehler. Kurz es läuft nicht. Und ich find den/die Fehler einfach nicht. Vielleicht hab ich ja wirklich n groben Bock geschossen und merks net ^^.

    Ja aber dann musst du diese Fehlermeldungen doch hier posten! Keiner hat Lust, den ganzen Code zu durchsuchen, wenn er gar nicht weiß, wo er suchen muss...

    Merke: "Geht nicht" ist keine Fehlerbeschreibung! 🙂



  • Sorry. Merk ich mir :). Danke dir.
    Hier also was Visual Studio 2005 ausspuckt:

    ------ Erstellen gestartet: Projekt: pkw, Konfiguration: Debug Win32 ------
    Kompilieren...
    pkw.cpp
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(11) : error C2065: 'pkwobj': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(11) : error C2228: Links von ".marke" muss sich eine Klasse/Struktur/Union befinden.
    Typ ist ''unknown-type''
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(12) : error C2228: Links von ".fgstnr" muss sich eine Klasse/Struktur/Union befinden.
    Typ ist ''unknown-type''
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(13) : error C2228: Links von ".leistung" muss sich eine Klasse/Struktur/Union befinden.
    Typ ist ''unknown-type''
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(40) : error C2061: Syntaxfehler: Bezeichner 'pkwobj'
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(41) : error C2275: 'pkw': Ungültige Verwendung dieses Typs als Ausdruck
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(41) : error C2228: Links von ".marke" muss sich eine Klasse/Struktur/Union befinden.
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(41) : error C2661: 'strncpy': Keine überladene Funktion akzeptiert 2 Argumente
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(42) : error C2143: Syntaxfehler: Es fehlt ';' vor '['
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(42) : error C2337: "i": Attribut wurde nicht gefunden.
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(42) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(43) : error C2143: Syntaxfehler: Es fehlt ';' vor '['
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(43) : error C2337: "i": Attribut wurde nicht gefunden.
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(43) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(45) : error C2065: 'pointer': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(53) : error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'pkw' akzeptiert (oder keine geeignete Konvertierung möglich)
    c:\programme\microsoft visual studio 8\vc\include\ostream(650): kann 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' sein
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(697): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(735): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(782): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(906): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const signed char *)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(913): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(920): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(927): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,unsigned char)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(168): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits> &(__cdecl *)(std::basic_ostream<_Elem,_Traits> &))"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(174): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ios<_Elem,_Traits> &(__cdecl *)(std::basic_ios<_Elem,_Traits> &))"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(181): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(188): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::_Bool)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(208): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(short)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(241): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned short)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(261): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(int)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(286): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 unsigned int)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(306): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(326): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 unsigned long)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(347): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__int64)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(367): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned __int64)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(388): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(float)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(408): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(double)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(428): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long double)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(448): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(const void *)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\programme\microsoft visual studio 8\vc\include\ostream(468): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_streambuf<_Elem,_Traits> *)"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    bei Anpassung der Argumentliste '(std::ostream, pkw)'
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(65) : error C3861: "eingabe": Bezeichner wurde nicht gefunden.
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(68) : error C3861: "ausgabe": Bezeichner wurde nicht gefunden.
    Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\User\Desktop\3_2\pkw\pkw\Debug\BuildLog.htm" gespeichert.
    pkw - 18 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========



  • mmmh kenne mich zwar nicht so wirkjlich aus aber würde sagen du müsstest erst mal die Syntax Fehler beheben

    *c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(12) : error C2228: Links von ".fgstnr" muss sich eine Klasse/Struktur/Union befinden.
    Typ ist ''unknown-type''
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(13) : error C2228: Links von ".leistung" muss sich eine Klasse/Struktur/Union befinden.
    Typ ist ''unknown-type''
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(40) : error C2061: Syntaxfehler: Bezeichner 'pkwobj'
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(41) : error C2275: 'pkw': Ungültige Verwendung dieses Typs als Ausdruck
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(41) : error C2228: Links von ".marke" muss sich eine Klasse/Struktur/Union befinden.
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(41) : error C2661: 'strncpy': Keine überladene Funktion akzeptiert 2 Argumente
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(42) : error C2143: Syntaxfehler: Es fehlt ';' vor '['
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(42) : error C2337: "i": Attribut wurde nicht gefunden.
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(42) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(43) : error C2143: Syntaxfehler: Es fehlt ';' vor '['
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(43) : error C2337: "i": Attribut wurde nicht gefunden.
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(43) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(45) : error C2065: 'pointer': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\user\desktop\3_2\pkw\pkw\pkw.cpp(53) : error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'pkw' akzeptiert (oder keine geeignete Konvertierung möglich)
    c:\programme\microsoft visual studio 8\vc\include\ostream(650): kann 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char )' sein

    was hilft ist sobald du ein paar zeilen ccode geschrieben hast ihn zu kompilieren bzw die projektmappe neu zu erstellen um fehler schnell zu finden!



  • in 'pkw.ausgabe' hast du sowas drin: cout << ar[i] << endl;
    aber 'cout' kann kein 'pkw' ausgeben, deshalb diese wahnsinning lange fehlermeldung.
    probier mal z.b.: cout << ar[i].marke << endl;
    das sollte 'cout' können. vielleicht könntest du auch einen operator<< für 'pkw' basteln, damit das funzt. aber für sowas frag mal lieber im c++ forum.
    🙂



  • Wo wird in pkw.cpp denn die pkw.h eingebunden? Geschieht das über pkwdef.h?

    Was ist denn hier pkwobj?

    pkw::pkw(char *marke, unsigned long fgstnr, unsigned int leistung){ //Konstruktor 
        pkwobj.marke="mercedes"; 
        pkwobj.fgstnr=0; 
        pkwobj.leistung=100;
    

    Du willst doch einfach deine Member mit den Argumenten vom Konstruktor füllen und so deine Instanz initialisieren, richtig? Dann mach es so:

    class pkw{ 
        private: 
            char m_marke[128];  //hier die Größe festlegen, dann musst du nicht dynamisch Speicher allozieren
            unsigned long m_fgstnr; 
            unsigned int m_leistung;
    
    pkw::pkw(char *marke, unsigned long fgstnr, unsigned int leistung){ //Konstruktor 
    
        //die Member werden mit den an den Konstruktor übergebenen Werten gefüllt
        strcpy(m_marke,marke);
        m_fgstnr=fgstnr;
        m_leistung=leistung;
    


  • Vielen Dank erstmal für die nette Hilfe. Setze mich da morgen mittag mal dran und gehe die Sache nochmal durch. Vielen vielen Dank ...



  • hi Fiend

    hab das mal schnell gecodet mir war langweilig 😉

    // File: main.cpp
    
    #include "pkw.h"
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	Pkw p1(1001, "Beetle", 115);
    	cout << " --------------- Ausgabe main ------------------" << endl;
    	cout << "Marke: ";
    	p1.print_marke(p1.get_marke());
    	cout << "\nLeistung: " << p1.get_leistung();
    	cout << "\nFahrgestellnummer: " << p1.get_fgstnr();
    	return 0;
    }
    
    // File: pkw.h
    
    #ifndef PKW_H
    #define PKW_H
    
    class Pkw
    {
        public:
            Pkw(unsigned long, char* ="Mercedes", unsigned int =100);
            ~Pkw();
            char* get_marke();
            unsigned long get_fgstnr();
            unsigned int get_leistung();
            void set_marke(char* );
            void set_fgstnr(unsigned long );
            void set_leistung(unsigned int );
    		void print_marke(char* );
    
        private:		
            char m_marke[128];
            unsigned long m_fgstnr;
            unsigned int m_leistung;
    };
    
    #endif
    
    // File: pkw.cpp
    
    #include "pkw.h"
    #include <iostream>
    
    using namespace std;
    
    Pkw::Pkw(unsigned long fgstnr, char *marke, unsigned int leistung)
    {
        strcpy(m_marke, marke);
        m_fgstnr=fgstnr;
        m_leistung=leistung;
    	cout << "Pkw der Marke " ;
    	print_marke(m_marke);
    	cout << " mit Fahrgestellnummer " << m_fgstnr << " und Leistung " << m_leistung << " erzeugt." << endl;
    }
    
    Pkw::~Pkw()
    {
    }
    
    void Pkw::print_marke(char *marke)
    {
    	for(int i=0;i<strlen(m_marke);i++)
    		cout << marke[i];
    }
    
    char* Pkw::get_marke()
    {
        return m_marke;
    }
    
    unsigned long Pkw::get_fgstnr()
    {
        return m_fgstnr;
    }
    
    unsigned int Pkw::get_leistung()
    {
        return m_leistung;
    }
    
    void Pkw::set_marke(char *marke)
    {
        strcpy(m_marke, marke);
    }
    
    void Pkw::set_fgstnr(unsigned long fgstnr)
    {
        m_fgstnr=fgstnr;
    }
    
    void Pkw::set_leistung(unsigned int leistung)
    {
        m_leistung=leistung;
    }
    


  • Puh danke dir... das geb ich mir jetzt ma genau und vergleich es mit meinem chaos ^^


Log in to reply