C++ aufrufen einer Funktion erzeugt immer LNK2019



  • Hallo erstmal,
    Ich bin zurzeit in einer Umschulung zur Fachinformatikerin und bald geht es für mich ins Praktikum. Dafür fuchse ich mich gerade ein wenig in C++ rein, allerdings sitze ich nun schon seit einigen Tagen an ein und dem selben Problem und bekomme es einfach nicht gelöst. Leider kennen sich meine Ausbilder auch nicht so gut mit C++ aus, also hoffe ich nun das ihr mir vielleicht einen Tipp, eine anregung geben könnt damit ich nicht demnächst meinen Laptop einfach aus dem Fenster werfe 😃 .

    Vorweg: Ich benutze den QT Creator(Da ich den auch im Praktikum nutzen werde) und habe Visual C++ als Compiler, weiß nicht ob es wichtig ist. Dachte ich schreibs mit dazu.

    Ich arbeite an einem Geldautomaten und habe eine Grafik gebastelt.

    wichtiger header:
    - automat.h

    wichtige cpp:
    - Automat.cpp
    - main.cpp

    der Fehler: LNK2019 Verweis auf nicht aufgelöstes externes externes Symbol ""public:void_cdecl Automat::setName(class QString)" (?setName@Automat@@QEAAXVQString@@@Z)" in funktion "main".

    Meine main.cpp:

    #include <QApplication>
    #include <iostream>
    
    #include "mainwindow.h"
    #include "automat.h"
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv); //bis hier hin von Qt automatisch eingefügt
        Automat au; //möchte einen Automaten erzeugen
        au.setName("Sparkasse"); //Möchte dem Automaten einen Namen geben
    }
    

    So, ohne au.setName bekomme ich keinen Fehler, damit ja. Ich schätze das irgendwas mit der Objekt erzeugung nicht stimmt. Aber trotz Buch wälzen und Internet und ausprobieren verschiedener dinge komme ich nicht weiter.

    Meine automat.h:

    #ifndef AUTOMAT_H
    #define AUTOMAT_H
    
    #include <QString>
    
    using namespace std;
    
    class Automat{
    
    private:
          QString name;
    
    public:
          void setName(QString name);
    
    };
    
    #endif //AUTOMAT_H
    

    Meine Automat.cpp:

    #include "automat.h"
    
    void Automat::setName(QString name)
    {
       this->name = name;
    }
    

    Ich habe alles was dafür nicht relevant ist einmal raus gelassen, ich hoffe mein Problem wird klar und es sind alle nötigen Informationen vorhanden. Ich habe das ganze auch schon mit einem normalenm "string" versucht, was zu dem selben Problem führt.

    Ich denke ich habe etwas einfach noch nicht ganz richtig verstanden, ich hoffe ihr könnt mir weiter helfen.

    Gruß Lillith



  • Da scheint die Automat.cpp nicht übersetzt und gebunden zu werden. Eigentlich sollte der Creator dafür sorgen, wenn du die Datei über die IDE erzeugst.

    Steht Automat.cpp in der Projektdatei (irgendwas.pro) unter SOURCES?

    Wenn ja: probier mal Erstellen=>qmake ausführen.



  • Hast du die beiden CPP-Dateien in dem Projekt eingebunden - oder nur die "main.cpp"?
    Siehst du in der Build-Ausgabe, ob beide Dateien kompiliert werden?



  • manni66 schrieb:

    Da scheint die Automat.cpp nicht übersetzt und gebunden zu werden. Eigentlich sollte der Creator dafür sorgen, wenn du die Datei über die IDE erzeugst.

    Steht Automat.cpp in der Projektdatei (irgendwas.pro) unter SOURCES?

    Wenn ja: probier mal Erstellen=>qmake ausführen.

    Ich habe tatsächlich vergessen sie in die SOURCES einzufügen. Ich versinke im Erdboden. Daran habe ich mich noch nicht so recht gewöhnt bei C++ aber jetzt vergesse ich das wahrscheinlich nie wieder.

    Vielen dank...es funktioniert.



  • Lillith schrieb:

    Ich habe tatsächlich vergessen sie in die SOURCES einzufügen. Ich versinke im Erdboden. Daran habe ich mich noch nicht so recht gewöhnt bei C++ aber jetzt vergesse ich das wahrscheinlich nie wieder.

    Eigentlich muss man da an nichts denken, wenn man "Hinzufügen" im Creator benutzt.


Log in to reply