Fehlermeldung Ausdruckssyntax
-
Hallo
Frage: Wo hängt's? Wo liegt mein Problem? Ich hab mittlerweile keine Ahnung mehr, wonach ich suchen soll. Und habe auch schon einige Bücher gewälzt... Ich finde das Problem nicht... Kann mir einer von euch helfen?
Andauernt erscheinen neue Fehlermeldung/en.
Jetzt zum Beispiel erscheint wieder folgende Fehlermeldung;
Fehlermeldung: Ausdruckssyntax
Insekt::Essen(int, int);#include <iostream.h> using std::cout; using std::cin; using std::endl; class Insekt { protected: int laenge; int gewicht; public: Insekt(int, int); virtual void Essen(int, int); virtual void Ausgabe(); }; class Libelle:public Insekt { private: int fluegellaenge; public: Libelle(int, int, int); void Essen(int, int); void Ausgabe(); }; Insekt::Insekt(int l, int g){ laenge=1; gewicht=g; } void Insekt::Essen(int, int){ laenge++; gewicht++; } void Libelle::Essen(int, int){ fluegellaenge++; Insekt::Essen(int, int); } void Insekt::Ausgabe(){ cout << "Dieses Insekt ist" <<laenge <<"cm lang"<<endl; cout << "und" << gewicht << "g schwer" <<endl; } Libelle::Libelle(int l, int g, int f): Insekt(l,g){ fluegellaenge=f; } void Libelle::Ausgabe(){ cout << "Libelle laenge" <<laenge <<endl; cout << "Gewicht" <<gewicht <<endl; cout << "Fluegellaenge" << fluegellaenge<<endl; } int main (){ Insekt insekt(20,1); Libelle libelle(20,1,20); Insekt *Insektenliste[2]; Insektenliste[0]=&insekt; Insektenliste[1]=&libelle; Insektenliste[0]->Ausgabe(); cout << "\n"; Insektenliste[1]->Ausgabe(); cout << "-------------------\"n"; for(int i=0; i<5; i++) { Insektenliste[0]->Essen(20,1); Insektenliste[1]->Essen(20,1); } Insektenliste[0]->Ausgabe(); cout << "\n"; Insektenliste[1]->Ausgabe(); cout << "--------------------\"n"; char c[50]; cin.getline(c,50); return 0; }Gruß
Mars3
-
Mars3 schrieb:
Jetzt zum Beispiel erscheint wieder folgende Fehlermeldung;
Fehlermeldung: Ausdruckssyntax
Insekt::Essen(int, int);Dann schau in deinen Büchern nochmal genau nach, wie man Basisklassenkonstruktoren aufruft. Stichwort Initialisierungsliste.
-
Mars3 schrieb:
...
void Libelle::Essen(int, int){ // ... Insekt::Essen(int, int); }...
Was soll das statement denn machen ? Was ist "int" in dem Zusammenhang ?
@MFK: Er ruft gar keinen Konstruktor auf, kann also auch mit einer "Initialisierungsliste" nichts anfangen

Gruß,
Simon2.
-
Ganau gesagt, gib deinen Parametern Namen.
-
Simon2 schrieb:
@MFK: Er ruft gar keinen Konstruktor auf, kann also auch mit einer "Initialisierungsliste" nichts anfangen

Jo, war im falschen Film

Sorry.
-
warum ++ ?
void Insekt::Essen(int, int){ laenge++; gewicht++; }wenn du da unten
Insektenliste[0]->Essen(20,1); ??so sieht für mich korrekter aus:
void Insekt::Essen(const int& a, const int& b){ laenge += a; gewicht += b; }
-
Bei int (wie bei fast allen einfachen Typen) sind konstante Referenzen Unsinn. Hier reichen einfache Kopien.
-
achso ok sowas vergiss man immer wieder

-
ist das deswegen unsinnig weil der compiler das selber optimiert?
-
Es ist unsinnig, weil ein int genausoviel, manchmal sogar weniger Speicher verbraucht (z.B. 4 Byte) als ein Pointer (z.B. 8 Byte auf Win64-Systemen).
(Referenzen werden intern als Pointer übergeben)Nachtrag: Außerdem müßte der Compiler dann bei Literalen erst eine temporäre Variable anlegen, um dann die Referenz darauf zu übergeben.