Link problem :MainWindow.obj : error LNK2019:
-
Hallo Zusammen,
Dieses Thema wird es bestimmt mehr mals in forum schon diskutiert und für die Wiederholung entschuldige ich mich :-(.
Ich habe einen Application, die mit mit dem Qt plugin und Visual Studio 2015 c++ entwicklet wurde.
Ich bekomme, die oben genannten Links Error. Ich weiss es nicht wie ich das lösen muss.
Anbei einen Codeabschnitt von der App:#include <qmlvisa.h> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { Visa* visa; QString const IPAdress = "TCPIP0:: 172.24.106.5::inst0::INSTR"; visa->open(IPAdress); //visa->write("STOP"); //visa->write("RUN"); ui.setupUi(this); }
Visa.h:
class Visa : public QQuickItem { Q_OBJECT Q_DISABLE_COPY(Visa) ..... public: Visa(QQuickItem *parent = 0); ~Visa(); Q_INVOKABLE void open(const QString &qRsrcName); Q_INVOKABLE void write(const QString &qCommand); ......
Die Fehlerausgabe:
MainWindow.obj : error LNK2019: unresolved external symbol "public: void __thiscall Visa::open(class QString const &)" (?open@Visa@@QAEXABVQString@@@Z) referenced in function "public: __thiscall MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QAE@PAVQWidget@@@Z)
Danke in Voraus
-
Saheb schrieb:
Ich weiss es nicht wie ich das lösen muss.
Die fehlende Funktion implementieren?
Visa* visa; QString const IPAdress = "TCPIP0:: 172.24.106.5::inst0::INSTR"; visa->open(IPAdress);
Wo wird da ein Visa-Objekt erzeugt?
-
manni66 schrieb:
Saheb schrieb:
Ich weiss es nicht wie ich das lösen muss.
Die fehlende Funktion implementieren?
Visa* visa; QString const IPAdress = "TCPIP0:: 172.24.106.5::inst0::INSTR"; visa->open(IPAdress);
Wo wird da ein Visa-Objekt erzeugt?
Nirgendwo
Aber wenn ich auch so schreibe:Visa* visa(0); QString const IPAdress = "TCPIP0:: 172.24.106.5::inst0::INSTR"; visa->open(IPAdress);
habe ich stets die gleiche Fehlermeldung
-
Der Hinweis mit der Implementierung bezieht sich den Linker-Error.
Der Hinweis zum Visa-Objekt bezieht sich auf ein Problem, dass erst zur Laufzeit zum tragen kommt - einfach ein zusätzlicher Hinweis.
-
Saheb schrieb:
Aber wenn ich auch so schreibe:
Visa* visa(0); QString const IPAdress = "TCPIP0:: 172.24.106.5::inst0::INSTR"; visa->open(IPAdress);
habe ich stets die gleiche Fehlermeldung
1. hat das nichts mit der Meldung zu tun
2. erzeugt auch das kein Objekt
-
Sollte es überhaupt einen Object von Type Visa erzeugt?
Einen Object von type Visa wird so erzeugt:
Visa visa = new Visa(0);
aber der Visa(0) ist aufjedenfall falsch.
wie kann ich aus so einen ObjectVisa(QQuickItem *parent = 0)
einen neue erzeugen ?
-
Saheb schrieb:
Sollte es überhaupt einen Object von Type Visa erzeugt?
Weiß nicht - dann darfst du das nicht erzeugte Objekt aber auch nicht benutzen.
Saheb schrieb:
Einen Object von type Visa wird so erzeugt:
Visa visa = new Visa(0);
Nein!
Saheb schrieb:
aber der Visa(0) ist aufjedenfall falsch.
aha
Saheb schrieb:
wie kann ich aus so einen Object
Visa(QQuickItem *parent = 0)
einen neue erzeugen ?
Das ist kein Objekt.
Was soll es bedeuten, aus einem Objekt ein neues zu erzeugen?
-
manni66 schrieb:
Was soll es bedeuten, aus einem Objekt ein neues zu erzeugen?
Aus diesem Klassen constructor:
Visa(QQuickItem *parent = 0)
einen neuen Object von Typ Visa(...)erzeugen
-
Saheb schrieb:
manni66 schrieb:
Was soll es bedeuten, aus einem Objekt ein neues zu erzeugen?
Aus diesem Klassen constructor:
Visa(QQuickItem *parent = 0)
einen neuen Object von Typ Visa(...)erzeugen
z.B.
Visa v1; Visa v2(0); QQuickItem *p = // woher auch immer es kommt Visa v3(p);
-
Visa visa; // Visa-Objekt, das automatisch gelöscht wird, sobald es aus dem Scope geht
auto visa = std::make_unique<Visa>(); // Ein dynamisch alloziertes Visa-Objekt
Vielleicht möchtest du aber auch nur eine Referenz auf ein schon existierendes Visa-Objekt. Das wird nur klar, wenn man die Anwendung im Code kennt.
-
theta schrieb:
auto visa = std::make_unique<Visa>(); // Ein dynamisch alloziertes Visa-Objekt
Vielleicht möchtest du aber auch nur eine Referenz auf ein schon existierendes Visa-Objekt. Das wird nur klar, wenn man die Anwendung im Code kennt.
Wobei diese Lösung probleme machen könnte, wenn ein gültiger parent beim erzeugen angegeben wurde.
Denn in Qt managen die parents die lifetime ihrer childs.
Wenn der Parent zerstört wird, werden auch alle childs zerstört. Wenn jetzt ein anderes Objekt einen uniqe_ptr auf so ein child hält dann kommt es zu einem double delete.