Objekte - Konstruktor: Komme nicht weiter

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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

    Quellcode

    1. #include <iostream>
    2. #include <cstring>
    3. #include "pkwdef.h"
    4. using namespace std;
    5. //int pkw::eingabe(int anzahl);
    6. //int pkw::ausgabe(pkw *ar, int groesse);
    7. pkw::pkw(char *marke, unsigned long fgstnr, unsigned int leistung){ //Konstruktor
    8. pkwobj.marke="mercedes";
    9. pkwobj.fgstnr=0;
    10. pkwobj.leistung=100;
    11. cout << "Standardinitialisierung erfolgt" << endl;
    12. cout << "Pkw der Marke" << marke;
    13. cout << "mit Fahrgestellnummer" << fgstnr;
    14. cout << "und Leistung" << leistung;
    15. cout << "erzeugt." << endl;
    16. }
    17. int pkw::eingabe(int anzahl)
    18. {
    19. int i; //Lokale Variablen
    20. char marke;
    21. int fgstnr;
    22. int leistung;
    23. for (i=0; anzahl < i; i++){
    24. cout << "Datensatz " << i ;
    25. cout << "von" << anzahl;
    26. cout << "wird eingelesen" << endl << endl;
    27. cout << "Marke: " << endl;
    28. cin >> marke;
    29. cout << "Fahrgestellnr: " << endl;
    30. cin >> fgstnr;
    31. cout << "Leistung: " << endl;
    32. cin >> leistung;
    33. cout << endl << "Objekte werden auf Heap erzeugt ..." << endl;
    34. pkw *pointer;
    35. pointer = new pkwobj[anzahl];
    36. strncpy(pkw[i].marke,marke);
    37. pkw[i].fgstnr=fgstnr;
    38. pkw[i].leistung=leistung;
    39. }
    40. return(*pointer);
    41. }
    42. int pkw::ausgabe(pkw *ar, int groesse)
    43. {
    44. int i = 0;
    45. cout << "Datensätze werden ausgegeben: " << endl << endl;
    46. while (i<=(groesse -1))
    47. cout << ar[i] << endl;
    48. i++;
    49. cout << "Fertig";
    50. }
    51. void main ()
    52. {
    53. int anzahl, i, *p, ausg;
    54. cout << "Wieviele Datensaetze sollen eingelesen werden ?" << endl << "Anzahl: ";
    55. cin >> anzahl;
    56. cout << "Dateneingabe: Nutzen / Aufruf der Funktion eingabe" << endl;
    57. p = eingabe(anzahl);
    58. cout << "Datenausgabe: Nutzen / Aufruf der Funktion ausgabe" << endl;
    59. ausg = ausgabe(p, anzahl);
    60. }
    Alles anzeigen


    Und die Header Datei:
    pkw.h

    Quellcode

    1. class pkw{
    2. private:
    3. char* marke;
    4. unsigned long fgstnr;
    5. unsigned int leistung;
    6. public:
    7. //Konstruktor und Destruktor
    8. pkw(char *marke, unsigned long fgstnr, unsigned int leistung);
    9. ~pkw();
    10. int eingabe(int anzahl);
    11. int ausgabe(pkw *ar, int groesse);
    12. };
    Alles anzeigen




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

    Vielen Dank in voraus.
  • Und wo ist da jetzt dein Problem? Wenn du eine Frage hast musst du diese auch stellen :)

    Da du C++ machst verwende doch mal bitte <string> statt <cstring> und bei cout folgt immer <<endl;
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • ------ 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)'
  • Hallo,

    ich will wirklich nicht unhöflich wirken, aber uns hier einfach ne Fehlermeldung hinklatschen und wir sollen mal machen ist nicht ok. Du solltest dein Problem schon in worde Fassen können.

    Du solltest dich mal mit Klassen vertraut machen, nicht wild draus los tippen (siehst ja was bei raus kommt). Da ich trotzdem nett bin, hier ein Denkanstoß und ein kleines Beispiel:

    Du greifst in deinem Konstruktor auf ein Objekt zu was niehmals erstellt wurd und auf eine Variable die es nicht gibt.

    Quellcode

    1. pkwobj.marke


    Woher kommt pkwobj ? woher kommt marke? Die beiden sachen kennt der Kompiler nicht weil du es die deklariert hast geschweige denn definiert.

    test.h

    Quellcode

    1. #ifndef TEST_H_
    2. #define TEST_H_
    3. class CPkw
    4. {
    5. public:
    6. CPkw(int nummer, int leistung);
    7. void getData();
    8. private:
    9. int m_nummer;
    10. int m_leistung;
    11. };
    12. #endif /*TEST_H_*/
    Alles anzeigen


    test.cpp

    Quellcode

    1. #include "test.h"
    2. #include <iostream>
    3. CPkw::CPkw(int nummer, int leistung) : m_nummer(nummer), m_leistung(leistung) {}
    4. void CPkw::getData()
    5. {
    6. std::cout << "Nummer: " << m_nummer << std::endl;
    7. std::cout << "Leistung: " << m_leistung << std::endl;
    8. }


    main.cpp

    Quellcode

    1. #include "test.h"
    2. int main()
    3. {
    4. CPkw pkw1(5, 3);
    5. pkw1.getData();
    6. return 0;
    7. }



    Das Objekt wird zu laufzeit erstellt. (In meinem Fallse in der main.cpp) Was bei dir auch so sein sollte. Über das Object bekommst du dann Zugriff auf Member variablen (bei mir in der Private sektion).

    PS: Ich kann dir keine Einführung in Klassen geben, das würde hier gnadenlos den Rahmen sprengen, bei kongkreten Problemen können wir helfen, aber eine Kompletteinführung wirst du hier nicht bekommen, dazu gibts genug sachen im Internet.

    Hier ist was, was ich nicht schlecht finde: OOP

    so long
    jd
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Ich wollte auch keien Komplettlösung. Damit wir uns nicht falsch verstehen. Ich bin das grade am lernen und das ein oder andere seh ich noch nicht so.
    Deine Hinweise haben mir sehr weitergeholfen und ich bedanke mich.

    Nur es ist eben schwer in Worte zu fassen bzw. eine konkrete Frage dazu zu verfassen, wenn das Programm einem mit dem eigenen Wissen so korrekt vorkommt und man fängt an Bildchen zu malen und Dinge zu ändern und findet keine Lösung. Oft fehlt nur ein Denkanstoß wie dieser.
    Mehr konkretisieren als die Compilerfehlermeldung konnt ichs ja net.

    Trotzdem Sorry und Danke.
  • Kein Thema,

    ich verstehe dich schon. Nur ist es nicht nur wichtig zu verstehen was man schreibt, sondern auch was der Kompiler erzählt. Wenn du dir deine Error Meldung mal genau anguckst, hast du nur 4 Fehler :) Der Kompiler neigt zu übertreibung.

    Wichtig ist wirklich den Kompiler zu kapieren. Und naja zu Postingform im Forum, kann ich dir nur ein Tipp geben, solche brechend langen Fehlermeldungen liest sich kein Mensch durch :) habe ich auch nicht gemacht...

    Freut mich das ich helfen konnte.

    so long
    jd
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.