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-.html

    Da 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-.html

    Da 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.


Anmelden zum Antworten