【发布时间】:2015-05-20 01:42:13
【问题描述】:
我正在探索 Qt 的单元测试框架,我注意到一件奇怪的事情 - 考虑到 QString 已经为 const char * 实现了相等运算符,我本来希望 QCOMPARE(QString("1"), "1") 能够正常工作,但它反而会导致链接器错误:
tst_untitled14test.obj:-1: error: LNK2019: unresolved external symbol "bool __cdecl QTest::qCompare<class QString,char const [2]>(class QString const &,char const (&)[2],char const *,char const *,char const *,int)" (??$qCompare@VQString@@$$BY01$$CBD@QTest@@YA_NABVQString@@AAY01$$CBDPBD22H@Z) referenced in function "private: void __thiscall Untitled14Test::testCase1(void)" (?testCase1@Untitled14Test@@AAEXXZ)
示例代码:
QVERIFY(QString("1") == "1"); // This works.
QCOMPARE(QString("1"), QString("1")); // This works.
// QCOMPARE(QString("1"), "1"); // Causes a linker error!
这是为什么呢? QCOMPARE 不是用了两个term的相等运算符吗?
编辑: 既然是在cmets中问的,项目是由Qt Creator的单元测试向导创建的(File->New Project->Other Project->Qt Unit Test),所以理所当然已正确设置,并包含QT += testlib。
【问题讨论】:
标签: c++ qt unit-testing linker-errors