我試圖建立在Qt Creator的一個QT項目,但得到的鏈接錯誤:QT moc.exe產生空文件,錯誤涉及type_traits
minecraftlauncher.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __cdecl Launcher::MinecraftLauncher::metaObject(void)const " ([email protected]@[email protected]@[email protected]@XZ)
minecraftlauncher.obj : error LNK2001: unresolved external symbol "public: virtual void * __cdecl Launcher::MinecraftLauncher::qt_metacast(char const *)" ([email protected]@[email protected]@[email protected])
minecraftlauncher.obj : error LNK2001: unresolved external symbol "public: virtual int __cdecl Launcher::MinecraftLauncher::qt_metacall(enum QMetaObject::Call,int,void * *)" ([email protected]@[email protected]@[email protected]@@[email protected])
debug\Launcher.exe : fatal error LNK1120: 3 unresolved externals
出於某種原因,moc.exe
,元對象編譯器,是創造空MOC _ * cpp文件,與
:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/include/type_trait(0): Note: No relevant classes found. No output generated.
我試圖在與它在Qt Creator中已經運行帶有標誌的命令行中運行moc
錯誤消息:
C:\QtSDK\x64\bin\moc.exe -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I"c:\QtSDK\x64\include\QtCore" -I"c:\QtSDK\x64\include\QtGui" -I"c:\QtSDK\x64\include" -I"c:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include" -I"c:\QtSDK\x64\include\ActiveQt" -I"debug" -I"..\Launcher" -I"." -I"c:\QtSDK\x64\mkspecs\win32-msvc2005" -D_MSC_VER=1400 -DWIN32 ..\Launcher\minecraftlauncher.hpp -o debug\moc_minecraftlauncher.cpp
並且它返回相同的錯誤。我試着逐個刪除幾個標誌,並縮小到-I"c:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include"
。出於某種原因,當該目錄位於包含路徑中時,顯示「找不到相關類」錯誤,並生成一個空的.cpp文件。但是,如果包含路徑上的目錄是而不是,則moc.exe可以正常工作。
由於包含:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/include/type_trait(0)
的錯誤消息,我嘗試在該位置重命名type_traits
文件,以免它被識別。當我這樣做時,moc.exe再次正常工作(但實際失敗,因爲type_traits包含在我已包括的標準庫文件中的某處)。 所以這個錯誤是在type_traits的某個地方引起的
從我對type_traits
知之甚少,我相信它與獲取有關對象的編譯類型信息有關。但我不知道爲什麼它會導致元對象編譯器出錯。它爲什麼這樣做? moc用type_traits做什麼,爲什麼它是失敗的?
我將是任何見解任何人都可以提供非常感激,因爲這一直是我十分不解。
的minecraftlauncher.hpp
文件:
#ifndef MINECRAFTLAUNCHER_HPP
#define MINECRAFTLAUNCHER_HPP
#include <QMainWindow>
namespace Launcher {
class MinecraftLauncher : public QMainWindow
{
Q_OBJECT
public:
explicit MinecraftLauncher(QWidget *parent = 0);
~MinecraftLauncher();
private:
};
}
#endif // MINECRAFTLAUNCHER_HPP
你能告訴我們你的'minecraftlauncher.hpp'文件? – leemes
https://gist.github.com/2941696 –