Instanziieren einer eigenen Klasse



  • Ich hab Probleme damit ein Objekt von einer selbst geschriebenen Klasse zu erzeugen:

    In der MyClass.h steht:

    class MyClass
    {
    public:
        MyClass(std::string MyString);
    };
    

    In der MyClass.cpp steht:

    class MyClass
    {
    
    MyClass::MyClass(std::string MyString)
    {
        // Konstruktor Code
    };
    
    };
    

    Jetzt versuche ich von dieser Klasse ein Object zu erzeugen in meiner main.cpp.

    include "MyClass.h"
    ...
    MyClass *MyClassObject;
    ...
    void MyVoid()
    {
       std::string xyz;
       MyClassObject = new MyClass(xyz);
    }
    

    Dann bekomme ich in der Zeile wo ich das new aufrufe folgenden Fehler:
    "undefined reference to `MyClass::MyClass(std::string)'"

    Ich kriege übrigens den gleichen Fehler wenn ich das (string) weglasse und einen parameterlosen Konstruktor (Standardkonstruktor) verwende.


  • Mod

    Du musst deine MyClass.cpp zu einer Objektdatei kompilieren und diese dazulinken. Wenn du Hilfe brauchst, wie man sowas macht, müsstest du uns mehr darüber verraten, welche Entwicklungswerkzeuge du benutzt.

    Ein Beispiel: Wenn du den Compiler von Hand aufrufst, dann kann man das bei den gängigen Compilern ganz einfach so machen:

    CC MyClass.cpp main.cpp -o gewünschter_name_des_programms
    


  • class MyClass {} in MyClass.cpp weglassen und dort MyClass.h einbinden, sonst definierst du in dieser Übersetzungseinheit einfach eine zweite Klasse MyClass, was ja nicht Sinn der Sache ist.
    Dass der Konstruktor zu MyClass gehört, erkennt der Compiler bereits an MyClass::MyClass.



  • @ Nanyuki:
    Super! Das wars! Jetzt funktioniert es 🙂

    Vielen Dank für die schnelle und gute Antwort!


Anmelden zum Antworten