【发布时间】:2012-03-09 17:38:03
【问题描述】:
我正在使用 Qt、CMake 和 VS2010 编译器。当我链接一小段测试代码时似乎有问题。链接器给出以下错误:
plotter.cpp.obj : error LNK2001: unresolved external symbol "public: virtual str
uct QMetaObject const * __thiscall Plotter::metaObject(void)const " (?metaObject
@Plotter@@UBEPBUQMetaObject@@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 的错误
-
Qt 有一个很棒的 IDE,你考虑过使用那个 + qmake 吗?
-
您的文件是如何组织的?您是否在头文件中编写所有代码?如果是这样,您必须在其底部包含 moc_ 文件。
-
@MartinBeckett 感谢您的提示,我做到了,并且似乎生成了正确的输出。
-
@MattPhillips 我以前这样用过,效果很好,不知道我现在做错了什么。