C++ GoogleTest枚举类在Visual Studio 2012中不起作用

C++ GoogleTest枚举类在Visual Studio 2012中不起作用,c++,visual-studio-2012,c++11,googletest,C++,Visual Studio 2012,C++11,Googletest,我有以下枚举类: enum class Message : qint8 {INFO = 0, WARNING = 1, NON_FATAL_ERROR = 2, FATAL_ERROR = 3, DEBUG_INFO = 4}; 当我使用Google Test运行以下代码时(从SVN签出): Visual Studio 2012显示以下例外情况: Error 1 error LNK2001: unresolved external symbol "class std::basic_st

我有以下枚举类:

enum class Message : qint8 {INFO = 0, WARNING = 1, NON_FATAL_ERROR = 2, FATAL_ERROR = 3, DEBUG_INFO = 4};
当我使用Google Test运行以下代码时(从SVN签出):

Visual Studio 2012显示以下例外情况:

Error   1   error LNK2001: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > testing::FLAGS_gtest_death_test_style" (?FLAGS_gtest_death_test_style@testing@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) C:\Users\Michele\Projects\occupancymapper\build\Modules\Core\test_logger.obj
    3   IntelliSense: enum "mapper::Message" has no member "INFO"   c:\Users\Michele\Projects\occupancymapper\Modules\Core\test\test_logger.cpp 21
    4   IntelliSense: enum "mapper::Message" has no member "NON_FATAL_ERROR"    c:\Users\Michele\Projects\occupancymapper\Modules\Core\test\test_logger.cpp 30
    5   IntelliSense: enum "mapper::Message" has no member "DEBUG_INFO" c:\Users\Michele\Projects\occupancymapper\Modules\Core\test\test_logger.cpp 40
    6   IntelliSense: enum "mapper::Message" has no member "FATAL_ERROR"    c:\Users\Michele\Projects\occupancymapper\Modules\Core\test\test_logger.cpp 50
Error   2   error LNK1120: 1 unresolved externals   C:\Users\Michele\Projects\occupancymapper\build\Modules\Core\Debug\logger.exe   1
错误1错误LNK2001:未解析的外部符号“类别标准::基本字符串测试::标志测试死亡测试样式”(?标志测试死亡测试_style@testing@@3V?$basic_string@DU?$char_traits@D@性病病毒$allocator@D@2@@std@@A)C:\Users\Michele\Projects\occumencymapper\build\Modules\Core\test\u logger.obj
3 IntelliSense:enum“mapper::Message”没有成员“INFO”c:\Users\Michele\Projects\occumencymapper\Modules\Core\test\test\u logger.cpp 21
4 IntelliSense:enum“mapper::Message”没有成员“非致命错误”c:\Users\Michele\Projects\OccupencyMapper\Modules\Core\test\test\U logger.cpp 30
5 IntelliSense:enum“mapper::Message”没有成员“DEBUG_INFO”c:\Users\Michele\Projects\occumencymapper\Modules\Core\test\test_logger.cpp 40
6 IntelliSense:enum“mapper::Message”没有成员“致命错误”c:\Users\Michele\Projects\OccupencyMapper\Modules\Core\test\test\U logger.cpp 50
错误2错误LNK1120:1未解析的外部C:\Users\Michele\Projects\occumencymapper\build\Modules\Core\Debug\logger.exe 1
如果没有GoogleTests,我的类中的代码工作得很好,但是当使用GoogleTest时,就不行了。在Linux下,它可以完美地工作

我已经应用了VARIADIC_MAX值(设置为10),正如在类似的例子中所建议的那样,但它不起作用。
我做错了什么?

看起来错误与枚举类无关-这些是“IntelliSense”(编辑器代码帮助)错误,而不是编译器的错误

真正的问题是链接器找不到“testing::FLAGS_gtest_death_test_style”符号。是否已指定要链接的.lib文件?使用相同的代码生成和调试级别设置构建google测试库(讨论可能会有帮助)。

我已经解决了这个问题。 在我的测试用例中,我添加了以下内容:

::testing::FLAGS_gtest_death_test_style = "threadsafe";
紧接着

::testing::InitGoogleTest(&argc, argv);
因为在Linux下,它给我带来了问题


删除MSVC下的这一行,解决了问题,然后进行编译。

您是否使用了
\u VARIADIC\u MAX
?您编写了
VARIADIC_MAX
(无下划线)。只是为了确保你已经试过了我两个都试过了,没有机会。但是这个错误与变量数无关(我猜)你在编译GTEST时是否尝试过使用GTEST_HAS_DEATH_TEST define?谢谢,我会尝试一下并告诉你,所以我尝试过以与构建应用程序相同的方式编译GTEST。奇怪的是,只有一个测试用例(调用上述函数的测试用例)没有编译/抛出错误,而其他测试用例没有。只有使用EXPECT\u NO\u THROW的测试用例没有链接。我使用CMake和gtest作为要编译的子项目。
::testing::FLAGS_gtest_death_test_style = "threadsafe";
::testing::InitGoogleTest(&argc, argv);