C++ 为什么QCOMPARE(QString(“1”)和“1”)会导致链接器错误?

C++ 为什么QCOMPARE(QString(“1”)和“1”)会导致链接器错误?,c++,qt,unit-testing,linker-errors,C++,Qt,Unit Testing,Linker Errors,我正在探索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]>(cla

我正在探索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)
为什么呢?
QCOMPARE
是否使用这两个术语的相等运算符

编辑:由于在注释中询问了它,所以该项目是由Qt创建者的单元测试向导(文件->新建项目->其他项目->Qt单元测试)创建的,因此当然它已经正确设置,并且包含了
Qt+=testlib

来自Qt

QCOMPARE对数据类型要求非常严格。实际和预期 必须是同一类型,否则测试将无法编译。这 禁止引入未指明的行为;这就是行为 这通常发生在编译器隐式强制转换参数时

在源代码
QCOMPARE

#define QCOMPARE(actual, expected) \
do {\
    if (!QTest::qCompare(actual, expected, #actual, #expected, __FILE__, __LINE__))\
        return;\
} while (0)

template <typename T>
inline bool qCompare(T const &t1, T const &t2, const char *actual, const char *expected,
                        const char *file, int line)
{
    return compare_helper(t1 == t2, "Compared values are not the same",
                              toString(t1), toString(t2), actual, expected, file, line);
}
#定义QCOMPARE(实际、预期)\
做{\
如果(!QTest::qCompare(实际、预期、实际、预期、文件、行))\
返回\
}而(0)
模板
内联布尔qCompare(T常量和t1,T常量和t2,常量字符*实际,常量字符*预期,
常量字符*文件,整数行)
{
返回compare_helper(t1==t2,“比较的值不相同”,
toString(t1)、toString(t2)、实际、预期、文件、行);
}
它是一个模板,要求第一个参数和第二个参数的类型相同

#define QCOMPARE(actual, expected) \
do {\
    if (!QTest::qCompare(actual, expected, #actual, #expected, __FILE__, __LINE__))\
        return;\
} while (0)

template <typename T>
inline bool qCompare(T const &t1, T const &t2, const char *actual, const char *expected,
                        const char *file, int line)
{
    return compare_helper(t1 == t2, "Compared values are not the same",
                              toString(t1), toString(t2), actual, expected, file, line);
}