Fehlermeldung: no '...........' member function declared in class '.......' VERERBUNG

Oche

Neu angemeldet
Registriert
21 Aug. 2014
Beiträge
12
Nabend Leute,

wollte grad einen Code kompilieren und bekam eine merkwürdige Fehlermeldung.
Ich versteh zwar den Inhalt der Fehlermeldung, jedoch nicht die Ursache^^
Für mich ergibt das irgendwie keinen Sinn, da es in Tutorials genauso gemacht wird.
Die Fehler sind an den beiden "markierten" Stellen zu finden.

Wäre sehr dankbar für Hilfe!

[src=cpp]#include <iostream>

using namespace std;

class flaeche{
public:
double flaecheninhalt;
void berechnung();
};

class kreis : public flaeche{
public:
kreis();

private:
double radius;
};

kreis::kreis(){
cout << "Kreis:" << endl;
}

void kreis::berechnung(){ FEHLERMELDUNG!!!
cout << "Radius = ";
cin >> radius;
flaecheninhalt = radius * radius * 3.14;
cout << "Flaecheninhalt = " << flaecheninhalt << endl;
}

class rechteck : public flaeche{
public:
rechteck();

private:
double a;
double b;
};

rechteck::rechteck(){
cout << "Rechteck:" << endl;
}

void rechteck::berechnung(){ FEHLERMELDUNG!!!
cout << "a = ";
cin >> a;
cout << "b = ";
cin >> b;
flaecheninhalt = a * b;
cout << "Flaecheninhalt = " << flaecheninhalt << endl;
}

int main(void){
kreis circle;
rechteck rectangle;

circle.berechnung();
rectangle.berechnung();


return 0;
}[/src]
 
Re: Fehlermeldung: no '...........' member function declared in class '.......' VERER

Wenn du eine Methode in der Elternklasse nur deklarieren und in verschiedenen Kindklassen implementieren willst, dann musst du sie in der Elternklasse als »pure virtual« definieren. (So heißt das hochoffiziel in C++. In vielen anderen Sprachen und oft auch in C++ sagt man »abstrakt« dazu.) Zusätzlich musst du sie auch in den Klassendefinitionen der Kindklassen nochmal deklarieren. Also:

Code:
Expand Collapse Copy
class flaeche{
public:
    [B]virtual[/B] void berechnung() [B]= 0[/B];
    // ...
};
 
class kreis : public flaeche{
public:
    [B]void berechnung() override[/B];
    // ...
};
 
void kreis::berechnung() {
    // ...
}

class rechteck : public flaeche{
public:
    [B]void berechnung() override[/B];
    // ...
};
 
void rechteck::berechnung() {
    // ...
}

// ...

Das Schlüsselwort »override« gibt es erst . Es ist prinzipiell optional, sollte aber in modernem Code nicht fehlen. Vorteil: Wenn du versuchst, per »override« eine Methode zu überschreiben, die im Vorfahr gar nicht als »virtual« gekennzeichnet ist, kriegst du vom Compiler eine Warnung.
 
  • Thread Starter Thread Starter
  • #3
Re: Fehlermeldung: no '...........' member function declared in class '.......' VERER

Hi,

dies war mir bisher noch gar nicht bekannt. Wahnsinn was es all gibt :D

DANKE
 
Zurück
Oben