konstruktorenproblem
-
hallo. Ich darf im rahmen meines FH-Studiums auch ein bischen c++ lernen. doch leider bin ich zu blöde. ich soll eine Aufgabe mit einer abstrakten basisklasse als schnittstelle lösen. doch leider scheitere ich schon bei einer "kleinigkeit". mein entwurf kann den compiler problemlos passieren, aber der linker meckert: "[Linker error] undefined reference to `kreis::kreis(float)' " und " [Linker error] undefined reference to `ellipse::ellipse(float, float)' ". wenn ich den standartkonstruktor nutze dann lässt es sich zumindest komplett compilen. ZVieleicht ist jemand von euch profis so freundlich und schaut mal in mein "werk"?
#include <iostream> #include <stdlib.h> #define pi 3.14 using namespace std; class figur { public: virtual void druck(void)= 0; virtual void flaeche(void)= 0; virtual void daten(void)= 0; }; class ellipse : public figur { protected: float Durchm, Dklein, A; public: ellipse(float Durchm, float Dklein); void flaeche() { A = (pi / 4) * Durchm * Dklein; } void daten() { cout.precision(4); cout << "Die Ellipse ist an der schmalsten Stelle:" << Dklein << endl; cout << "Die Ellipse ist an der breitesten Stelle:" << Durchm << endl; cout << "Die Ellipse hat eine Flaeche von" << A << endl; } void druck() { flaeche(); daten(); } }; class kreis : public ellipse { protected: float Durchm, A; public: kreis(float Durchm); void flaeche() { A = (pi / 4) * Durchm * Durchm; } void daten() { cout.precision(4); cout << "Der Kreis hat einen Durchmesser von:" << Durchm << endl; cout << "Der Kreis hat eine Flaeche von" << A << endl; } void druck() { flaeche(); daten(); } }; int main() { kreis nummer1(2); ellipse nummer2(2,2); nummer1.druck(); nummer2.druck(); system("PAUSE"); return 0; }Ihr seid quasi meine letzte Hoffnung. habe schon viele viele stunden in büchern und in foren gesucht und nichts gefunden.
-
Wo hast du denn den Konstruktorrumpf? Du hast zwar die Konstruktoren definiert aber nirgendwo implementiert.
class ellipse { public: ellipse(...); }; ellipse::ellipse(...) { // impelemtation von ellipse::ellipse(...) }oder so:
class ellipse { public: ellipse(...) { // impelemtation von ellipse::ellipse(...) } };class kreis : public ellipse { protected: float Durchm, A;Durchm und A sind doch schon in ellipse definiert, also wieso definierste die 2 Attribute neu?
Ausserdem ist A kein Attribut von kreis/ellipse.
Mach doch die Klasse figur so:class figur { public: virtual void druck()= 0; virtual float flaeche()= 0; // statt void gibt die Methode float zurück virtual void daten()= 0; };die Methode float flaeche() gibt dann die Fläche der Figur zurück. Dann kannst du das ganze so verwenden:
main() { ellipse el(10, 20); cout << "Die Fläche der Ellipse ist: " << el.flaeche(); }Ausserdem brauchst du nicht flaeche(void) schreiben, das ist C, in C++ reicht flaeche().
-
class ellipse { public: ellipse(...) { // impelemtation von ellipse::ellipse(...) } };das hatte ich auch schon probiert. der erfolg war aber auch nicht gerade überwältigend
Ich werde das nochmals probieren. vieleicht hatte ich zu dem zeitpunkt noch andere fehlerchen. ich werde bald auch wahnsinnig mit dieser sprache.In jeden Fall schon mal danke für die sehr sehr schnelle Antwort. Ich hoffe mit deiner Antwort werde ich meine Aufgabe vollenden können.