【发布时间】:2014-11-11 19:58:19
【问题描述】:
我一直在尝试按照一本书自学单元测试。
书中代码使用C++11标准,有这样一行:
auto variable = function(parameter);
当我第一次编译它时,我收到了这个警告:
警告:'auto' 在 C++11 中改变了含义;请删除它[-Wc++0x-compat]
没什么大不了的,我可以通过选中 Project->Build options... 菜单中的以下框来解决这个问题:
[ ] 让 g++ 遵循 C++ 11 ISO C++ 语言标准 [-std=c++11]
但是,现在我在 gtest-port.h 中收到与 Google Mock 相关的新错误:
| |在函数'int testing::internal::posix::StrCaseCmp(const char*, const char*)'中:
|1719|错误:“_stricmp”未在此范围内声明
| |在函数'char* testing::internal::posix::StrDup(const char*)'中:
|1721|错误:“_strdup”未在此范围内声明
| |在函数 'FILE* testing::internal::posix::FDOpen(int, const char*)':|
|1779|错误:“fdopen”未在此范围内声明
搜索这个问题对我来说收效甚微,但我确实尝试定义了目标操作系统,因为它是一个建议的解决方案,以防它没有被自动正确识别。在项目中添加 GTEST_OS_WINDOWS=1 和/或 GTEST_OS_WINDOWS_DESKTOP=1 定义没有任何改变。
我意识到这在这种情况下很容易解决,只需提供正确的类型而不是使用 auto,但如果可能的话,我想找到一个解决方案。替换 auto 并且未选中 -std=c++11 选项会使代码按预期工作,因此库可以正常工作。
我在 Windows 中使用 Code::Blocks 13.12、MinGW/g++ 4.8.1-4 和 Google Mock 1.7。
感谢阅读 =)
【问题讨论】:
-
谢谢 sjdowling,这确实有效!不过,似乎无法弄清楚如何将您的出色答案标记为问题的答案。我会努力弄清楚的。
标签: c++ c++11 mingw codeblocks gmock