Class Problem



  • also soll ich die const entfernen. Ich gebe zu des ganze c++ ist ein buch mit sieben siegeln für mich und ich muss leider einen kurs machen für meine ausbildung, aber alles lernen hilft nicht wirklich. und was ist jetzt genau der unterschied zwischen deklartion und defenition?



  • Ja, zum einen das const solltest du dann schon weglassen. Das mit Definition und Deklaration war wohl etwas verwirrend von mir beschrieben. Mir ging es eher um den Namen der Elementfunktion setdiameter . Bei der Definition dieser Elementfunktion hast du statt setdiameter nämlich setdiamter geschrieben, also hast du das 'e' im Namen der Elementfunktion vergessen.



  • danke ich habe die const weg gemacht und auch den diameter ausgebessert.
    was heißt diese fehlermeldung genau?
    12 C:\Dokumente und Einstellungen\Amilo\Eigene Dateien\C++\kreis.cpp ISO C++ forbids initialization of member `PI'



  • Playmuckel schrieb:

    ok sorry aber ich muss sagen ich verstehe von der ganzen sache nur bahnhof und was ist die initialisierungs liste des constructors?

    Also, ich erklär es dir kurz:
    Konstruktoren sind Funktionen, die eine Instanz der Klasse erstellen und normalerweise die Aufgabe haben, deren Member zu initialisieren. Dabei schreibt man die einzelnen Membernamen nach einem Doppelpunkt und trennt sie mit Kommas. In den Klammern stehen die Werte, mit denen die Membervariablen initialisiert werden.

    Du hast zum Beispiel eine Klasse MyClass mit zwei double -Membern Mem und Var . Dann kannst du im Standardkonstruktor folgendes schreiben:

    MyClass::MyClass() : Mem(3.5), Var(5.66)
    {
    
    }
    

    In einem anderen Konstruktor könntest du die Member gleich mit den übergebenen Argumenten initialisieren:

    MyClass::MyClass(double NewMem, double NewVar = 10.8) : Mem(NewMem), Var(NewVar)
    {
    
    }
    

    Bei elementaren Typen wie int , double etc. und Zeigern findet keine Initialisierung statt, wenn man dies nicht explizit tut. Bei PODs auch nicht. Bei Klassentypen wird der Standardkonstruktor aufgerufen.

    Playmuckel schrieb:

    ich muss leider einen kurs machen für meine ausbildung, aber alles lernen hilft nicht wirklich.

    Ich fürchte aber, da wirst du, vor allem langfristig, nicht darum herum kommen. Klar brauchst du nicht alles zu wissen, aber Klassen - und insbesondere auch Konstruktoren, sind schon sehr essenziell.

    Playmuckel schrieb:

    was heißt diese fehlermeldung genau?
    12 C:\Dokumente und Einstellungen\Amilo\Eigene Dateien\C++\kreis.cpp ISO C++ forbids initialization of member `PI'

    Das hab ich bereits in meinem oberen Post erwähnt. Bitte lies meine Antworten.



  • ich weiß ihr gebt euch wanhsinnig viel mühe und opfert zeit, aber ich verstehe es immer noch nicht was ich dabei falsch mache und des andere ist folgende fehlermeldung: 75 C:\Dokumente und Einstellungen\Amilo\Eigene Dateien\C++\kreis.cpp expected `;' before "box" und ich habe des so im unterricht gelernt weiß aber gerade nicht was falsch ist.



  • Playmuckel schrieb:

    75 C:\Dokumente und Einstellungen\Amilo\Eigene Dateien\C++\kreis.cpp expected `;' before "box"

    Hier:

    cout << "Radius:: " box.getradius()<< endl; 
    cout << "Area:: " box.getarea()<< endl; 
    cout << "Diameter::" box.getdiameter() << endl; 
    cout << "Perimeter ::" box.getperimeter() << endl;
    

    Hast du ein paar << (= Ausgabeoperator) vergessen:

    cout << "Radius:: " << box.getradius()<< endl; 
    cout << "Area:: " << box.getarea()<< endl; 
    cout << "Diameter::" << box.getdiameter() << endl; 
    cout << "Perimeter ::" << box.getperimeter() << endl;
    


  • Ok vielen dank



  • Playmuckel schrieb:

    ich weiß ihr gebt euch wanhsinnig viel mühe und opfert zeit

    Nun ja, "wahnsinnig" ist vielleicht etwas übertrieben, aber ich bin froh, wenn du das schätzt.

    Ich kann dir nur empfehlen, unsere Antworten zu lesen, bis du verstanden hast, worum es geht und was denn der Fehler war. Es ist auch überhaupt kein Problem, bei Unklarheiten nochmals nachzufragen.



  • also sollte ich PI definieren
    circle:: circle (PI = 3,17)
    Mich verwirrt des ganze total.



  • ok des mit Pi habe ich hinbekommen, aber jetzt sind es noch zwei kleinigkeiten mit denen ich mal gar nix anfangen kann.
    C:\DOKUME1\Amilo\LOKALE1\Temp\cceybaaa.o(.text+0x1c7) In function main': [Linker error] undefined reference tocircle::circle()'
    C:\DOKUME1\Amilo\LOKALE1\Temp\cceybaaa.o(.text+0x1c7) ld returned 1 exit status



  • Du hast den Standardkonstruktor circle::circle() zwar in der Klasse deklariert, aber nirgends definiert. Die Definition könnte etwa so aussehen:

    circle::circle() : PI(3.1415)
    {
    
    }
    

    Die anderen Membervariablen kannst du auch in der Initialisierungsliste initialisieren (z.B. nach PI , mit Komma getrennt).


Anmelden zum Antworten