Ich bin nicht ganz sicher, wo mein Problem ist.QT Creator Linker Fehler: Link2019 Datei nicht gefunden
Ich verwende Qt Creator für ein OpenGL-Projekt, und zum ersten Mal habe ich versucht, meinem Projekt noch ein paar Klassen hinzuzufügen. Ich habe Header- und Implementierungsdateien hinzugefügt: terrain.h, terrain.cpp, imageloader.h und imageloader.cpp.
Ich glaube, mein Problem in meinem .proDatei liegt:
HEADERS += glwidget.h \
imageloader.h \
terrain.h
SOURCES += glwidget.cpp main.cpp \
imageloader.cpp \
terrain.cpp
QT += opengl
CONFIG -= app_bundle
CONFIG += console c++11
INCLUDEPATH += "../include"
INCLUDEPATH += $$PWD
RESOURCES += shaders.qrc
Als ich qmake laufen, keine Fehler vorhanden sind.
Dann, als ich bauen das Projekt (nach der Reinigung, Laufen Qmake), habe ich die folgende Fehlermeldung erhalten:
glwidget.obj:-1: error: LNK2019: unresolved external symbol "private: static class Terrain * __cdecl GLWidget::loadTerrain(char const *,float)" ([email protected]@@[email protected]@[email protected]) referenced in function "protected: virtual void __cdecl GLWidget::initializeGL(void)" ([email protected]@@MEAAXXZ)
Qt Creator sagt auch: Datei nicht gefunden glwidget.obj
jedoch die Problem scheint wirklich mit der Geländeklasse zu sein, oder wie es mit glwidget interagiert.
Wenn ich alle Verweise auf Terrain entferne, funktioniert der Build einwandfrei.
jedoch, wenn ich die folgende Zeile in der initializeGL() Methode glwidget.cpp die LINK2019 Fehler angezeigt:
terrain = loadTerrain("test.bmp", 20);
Gelände in glwidget.h als eine Instanz der Klasse von Terrain Gelände definiert sind CPP:
Terrain* terrain;
Und loadTerrain ist in glwidget.h wie folgt definiert:
static Terrain* loadTerrain(const char* filename, float height);
Interessanterweise tritt dieser Fehler auf, selbst wenn die Implementierung von loadTearain auskommentiert ist.
Hier sind ein paar Dinge, die ich versucht habe:
Als ich vor oder nach Qmake sauber laufen, oder den OBJ-Dateien in dem Build-Ordner löschen, gibt es keine Änderung. Ich habe festgestellt, dass glwidget.obj sowie terrain.obj erscheinen, wenn das Projekt neu erstellt wird.
Jede Hilfe wird geschätzt. Lassen Sie mich wissen, wenn Sie irgendwelche meiner Akten sehen möchten.
BEARBEITEN Sie: Das Problem bleibt bestehen, auch nachdem die Methode loadTerrain() nicht statisch gemacht wurde.
EDIT 2 ich auch den zweiten Fehler zu haben schien vergessen, dass es wirft, obwohl ich nicht sicher bin, dass dies nicht mehr helfen:
debug\program2.exe:-1: error: LNK1120: 1 unresolved externals
debug ist der Ordner, in dem die. obj erscheint und program2 ist der Name des Projekts.
BEHOBEN! Es stellt sich heraus, dass die Methode statisch war das Problem. Sie können keine statische Methode in Headerdateien deklarieren, die von mehreren Quellen in der Art und Weise verwendet werden, wie ich es getan habe.I ersetzt:
static Terrain* loadTerrain(const char* filename, float height);
mit
Terrain* GLWidget::loadTerrain(const char* filename, float height);
Neben den nachfolgenden Aufrufen der Methode zu ändern.
Danke für Ihre Hilfe!
Es scheint, Sie verpassen die Implementierung von LoadTerrain in cpp-Datei? – demonplus
Ich habe eine Implementierung auskommentiert, aber die Auskommentierung scheint nicht zu helfen. –
Wenn die Implementierung auskommentiert ist, bedeutet dies, dass Sie keine Implementierung haben. Könnten Sie bitte verwandte Teile Ihrer Kopf- und Quelldateien posten? – demonplus