我正在使用Qt,CMake和VS2010編譯器。當我鏈接一小段測試代碼時,似乎存在一個問題。該接頭提供了以下錯誤:Qt程序沒有鏈接,沒有生成moc文件
plotter.cpp.obj : error LNK2001: unresolved external symbol "public: virtual str
uct QMetaObject const * __thiscall Plotter::metaObject(void)const " (?metaObject
@[email protected]@[email protected]@XZ)...
(它會持續一段時間)
當我試圖從QObject的在下面的代碼繼承出現的錯誤:
class Plotter : public QObject
{
Q_OBJECT
public:
如果我忽略了Q_OBJECT,程序會鏈接,但我不能在運行時使用類插槽。 我注意到沒有爲plotter.h生成moc文件。這是我的CMakeLists.txt:
cmake_minimum_required (VERSION 2.6)
project (ms)
SET(CMAKE_BUILD_TYPE "Release")
FIND_PACKAGE(Qt4)
INCLUDE(${QT_USE_FILE})
ADD_DEFINITIONS(${QT_DEFINITIONS})
LINK_LIBRARIES(
${QT_LIBRARIES}
)
set(all_SOURCES plotter.cpp main.cpp dialog.cpp)
QT4_AUTOMOC(${all_SOURCES})
add_executable(ms ${all_SOURCES})
target_link_libraries(ms ${LINK_LIBRARIES})
爲dialog.cpp生成一個文件MOC,但不是plotter.cpp,這怎麼可能?
謝謝!
您是否曾嘗試在plotter.h文件上手動運行moc - 只是爲了檢查是否存在未被解析的東西,或者它是cmake的錯誤 – 2012-03-09 17:39:49
Qt有一個很棒的IDE,您有沒有考慮過使用那個+ qmake? – 2012-03-09 17:47:11
你的文件是如何組織的?你是否將所有的代碼寫入頭文件?如果是這樣,您必須在其底部包含moc_文件。 – 2012-03-09 17:52:03