Inline Konstruktor Fehler



  • Ich nutze VC++ 2008.

    // CTest.h
    #ifndef CTEST_H
    #define CTEST_H
    class CTest {
       int a;
    public:
       CTest();
       CTest(const int);
    };
    #endif
    
    // CTest.cpp
    #include "ctest.h"
    
    inline CTest::CTest() {
       this->a = 0;
    }
    
    inline CTest::CTest(const int b) {
       this->a = b;
    }
    
    // main.cpp
    #include <iostream>
    #include "ctest.h"
    using std::cout;
    using std::endl;
    
    int main(int argc, char* argv[]) {
       CTest testconstructor;
    
       system("pause");
       return 0;
    }
    

    Wenn ich das kompiliere, bekomme ich folgende Link Error
    Error 1 error LNK2001: unresolved external symbol "public: __thiscall CTest::CTest(void)" (??0CTest@@QAE@XZ)
    Error 2 fatal error LNK1120: 1 unresolved externals

    Wieso geht das nicht mit inline? was ist hier falsch?



  • inline geht beim ctor nicht.
    Mach es doch so:

    class CTest {
       int a;
    public:
       CTest()
       : a ( 0 )
       {}
       CTest(const int b)
       : a ( b )
       {}
    };
    

    Nennt sich Initialisierungsliste und der richtige Weg, um (nicht-statische) Membervariablen zu initialisieren.



  • Laut Buch "C++ von A bis Z" sollen inline Konstruktor und Destruktor möglich sein.
    Ich weiss das man auch mit Initialisierungliste auch machen kann, wollte aber die möglichkeit der verwendung von inline konstruktor kennen.



  • [quote="drakon"]inline geht beim ctor nicht.
    [quote]
    FALSCH

    ----

    @JnZn558:
    Das Problem ist, dass du inline nicht verstanden hast.
    Zieh die Definition der Funktionen (CTest::CTest etc.) mit ins HEADER File, dann wird es auch gehen.
    Oder lass das inline weg.
    Eins von beiden.



  • An inline muss sich der compiler sowiesi nicht halten, also lass es weg, der compiler weiß so gut wie immer besser wann er was inlined.



  • hustbaer schrieb:

    drakon schrieb:

    inline geht beim ctor nicht.

    Jop, habe mich falsch ausgedrückt. Ich meinte auch das Schlüsselwort geht nicht. In der Klasse definiert ist es natürlich möglich.



  • hustbaer schrieb:

    "Let there be Licht..."
    http://lichttools.sourceforge.net/

    LOL, was is n das für n lächerliches tool.



  • [quote="hustbaer"][quote="drakon"]inline geht beim ctor nicht.

    FALSCH

    ----

    @JnZn558:
    Das Problem ist, dass du inline nicht verstanden hast.
    Zieh die Definition der Funktionen (CTest::CTest etc.) mit ins HEADER File, dann wird es auch gehen.
    Oder lass das inline weg.
    Eins von beiden.

    danke sehr, die ist die hilfreicheste antwort.


Anmelden zum Antworten