linkproblem wegen konstruktor einer klasse
-
class A { public: A(int i) {itsX = i;} ~A(); private: int itsX; }; class B : public A { public: B(int i); }; B::B (int i) : A(i) { }; int main() { B var(0); return 0; }Warum erscheint denn bei diesem Code folgendes Linkproblem:
error LNK2019: unresolved external symbol "public: __thiscall A::~A(void)
Danke.
H.W.
-
Du hast ganz einfach vergessen, den DESTRUKTOR der Klasse A zu implementieren.
Wenn du ihn überhaupt nicht angibst, erzeugt der Compiler ihn für dich - komplett mit allem Zubehör. Wenn du ihn in der Klassendefinition erwähnst, erwartet der Compiler auch von DIR, ihn zu implementieren.
-
Danke.
Ich hätte dazu mal noch eine Frage. Un zwar geht es dazu auch um folgenden thread:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-165250-and-highlight-is-.htmlDa ich keine globalen Variablen definieren will, wie von dir empfohlen, wollte ich die Klasse A mit der Variablen itsX global nutzen. Und zwar so:
class A { public: A(){itsX = 0;} ~A(){} void SetX(int i) {itsX = i;} int GetX() {return itsX;} private: int itsX; }; class B : public A { public: B() : A() {} }; class C : public A { public: C() : A() {} }; int main() { B var1; var1.SetX(1); C var2; return 0; }Mit B wollte ich die Variable itsX auf 1 setzen, und wenn ich dann C von A ableite, ist itsX nicht mehr 0 sondern 1. Das funktioniert aber nicht, weil C von A abgeleitet wird noch bevor itsX auf 1 gesetzt wird.
Wie hast du dann aber diesen Satz gemeint:
CStoll schrieb:
Meistens besteht ja eine Verbindung dieser Variable zu einer meiner Klassen - und dann würde ich sie auch in der .H/.CPP dieser Klasse unterbringen.

Vielen Dank!
H.W.
-
Hans Wurst schrieb:
Ich hätte dazu mal noch eine Frage. Un zwar geht es dazu auch um folgenden thread:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-165250-and-highlight-is-.htmlDa ich keine globalen Variablen definieren will, wie von dir empfohlen, wollte ich die Klasse A mit der Variablen itsX global nutzen. Und zwar so:
Du hast zwei Objekte vom Typ B bzw. C - und jedes hat eine eigene Kopie des Members
itsX. Wenn du nur eine Variable für alle A's (und von A abgeleiteten Objekte) benötigst, mußt du sie als static definieren.Wie hast du dann aber diesen Satz gemeint:
CStoll schrieb:
Meistens besteht ja eine Verbindung dieser Variable zu einer meiner Klassen - und dann würde ich sie auch in der .H/.CPP dieser Klasse unterbringen.
Wenn ich eine globale Variable vom Typ A benötige, landet die in der A.h/A.CPP. Genauso werden statische Member einer Klasse in ihrer .CPP definiert.