Implementierung ctor/dtor in .h ohne .cpp



  • Hoi,

    beim Linken unter VS .Net 2003 bekomme ich folgenden Fehler, wenn ich versuche folgenden Code OHNE eine entsprechende .cpp Datei zu benutzen:

    #ifndef __I2D_FIGUR_
    #define __I2D_FIGUR_
    
    #include <iostream>
    
    using namespace std;
    
    class i2D_Figur
    {
    public:
    	i2D_Figur();
    	virtual ~i2D_Figur();
    	float berechneUmfang(void){return 1.4f;}
    	virtual float berechneFlaeche(void)=0;
    };
    
    #endif
    

    Auch eine Implementation des ctors/dtors in der Header Datei bringt keine Besserung. Erst wenn die Implementation ausgelagert wird, kompiliert der Code fehlerfrei.

    #include "i2D_Figur.h"
    
    i2D_Figur::i2D_Figur()
    {
    }
    
    i2D_Figur::~i2D_Figur()
    {
    }
    

    Fehler:
    2D_Figur error LNK2019: Nicht aufgelöstes externes Symbol '"public: __thiscall i2D_Figur::i2D_Figur(void)" (??0i2D_Figur@@QAE@XZ)', verwiesen in Funktion '"public: __thiscall cDreieck::cDreieck(float,float,float,float)" (??0cDreieck@@QAE@MMMM@Z)'

    2D_Figur error LNK2019: Nicht aufgelöstes externes Symbol '"public: virtual __thiscall i2D_Figur::~i2D_Figur(void)" (??1i2D_Figur@@UAE@XZ)', verwiesen in Funktion '"public: virtual __thiscall cDreieck::~cDreieck(void)" (??1cDreieck@@UAE@XZ)'

    2D_Figur fatal error LNK1120: 2 unaufgelöste externe Verweise

    Wieso kann man nicht in der HeaderDatei implementieren, bzw. wie ist die interne Auflösung der Dateien?

    Grüße



  • class i2D_Figur
    {
    public:
    i2D_Figur()
    {
    
    }; 
    
    virtual ~i2D_Figur()
    {
    
    }; 
    
      float berechneUmfang(void){return 1.4f;}; // Semikolon vergessen
    // [...]
    


  • Ne, das Semikolon ist da absolut überflüssig.



  • [cpp]
    class i2D_Figur
    {
    public:
    inline i2D_Figur();
    inline virtual ~i2D_Figur();
    };

    inline i2D_Figur::i2D_Figur()
    {
    }

    inline virtual i2D_Figur::~i2D_Figur()
    {
    }[/cpp]



  • PeiLong schrieb:

    Auch eine Implementation des ctors/dtors in der Header Datei bringt keine Besserung. Erst wenn die Implementation ausgelagert wird, kompiliert der Code fehlerfrei.

    Wenn du die Implementation in der Header Datei haben willst, dann musst du die entweder direkt in der Klassendefinition machen oder ausserhalb der Klasse und inline.



  • Alles klar!

    Vielen Dank!


Anmelden zum Antworten