代码之家  ›  专栏  ›  技术社区  ›  dwj

Qt单元测试中的链接错误-缺少到MOC文件的链接?

  •  1
  • dwj  · 技术社区  · 16 年前

    我正在尝试对继承QObject的类进行单元测试;类本身位于目录结构的一个级别上。当我构建单元测试时,如果找不到类的moc文件,我会得到标准的未解决错误:

    test.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall UnitToTest::qt_metacast(char const *)" (?qt_metacast@UnitToTest@@UAEPAXPBD@Z)
    
    + 2 missing functions
    

    MOC文件已创建,但似乎未链接。我在网上和qt的文档里翻了好长一段时间,然后撞到了墙上。

    如何让单元测试在链接中包含MOC文件?

    ===

    我的项目文件非常简单:

    TEMPLATE = app
    TARGET = test
    DESTDIR = .
    CONFIG += qtestlib
    INCLUDEPATH += . ..
    DEPENDPATH += .
    HEADERS += test.h
    SOURCES += test.cpp ../UnitToTest.cpp stubs.cpp
    DEFINES += UNIT_TEST
    

    我的目录结构和文件:

    C:.
    | UnitToTest.cpp
    | UnitToTest.h
    |
    \---test
        |   test.cpp       (Makefiles removed for clarity)
        |   test.h
        |   test.pro
        |   stubs.cpp
        |
        +---debug
        |       UnitToTest.obj
        |       test.obj
        |       test.pdb
        |       moc_test.cpp
        |       moc_test.obj
        |       stubs.obj
    

    编辑: 附加信息

    生成的 Makefile.Debug 显示缺少的MOC文件:

    SOURCES       = test.cpp \
            ..\test.cpp \
            stubs.cpp debug\moc_test.cpp
    OBJECTS       = debug\test.obj \
            debug\UnitToTest.obj \
            debug\stubs.obj \
            debug\moc_test.obj
    
    1 回复  |  直到 16 年前
        1
  •  2
  •   chalup    16 年前

    您需要将../UnitToTest.h添加到pro文件的头文件中。