Я пытался изучить модульное тестирование самостоятельно, следуя книге.C++: модульное тестирование с использованием Google Mock с кодом :: Blocks, MinGW и C++ 11
Код в книге использовать стандарт C++ 11 и имеют такую строку:
auto variable = function(parameter);
Когда я первый скомпилирован я получил это предупреждение:
warning: 'auto' changes meaning in C++11; please remove it [-Wc++0x-compat]
Нет Biggie, я можно было бы исправить это, установив следующий флажок в меню Project-> Build options ...:
[ ] Have g++ follow the C++ 11 ISO C++ language standard [-std=c++11]
Теперь, однако, я получаю новый сферические зеркала, связанные с Google Mock в GTEST-port.h:
| | In function 'int testing::internal::posix::StrCaseCmp(const char*, const char*)':
|1719| error: '_stricmp' was not declared in this scope
| | In function 'char* testing::internal::posix::StrDup(const char*)':
|1721| error: '_strdup' was not declared in this scope
| | In function 'FILE* testing::internal::posix::FDOpen(int, const char*)':|
|1779| error: 'fdopen' was not declared in this scope
Поиск по этой проблеме дали мало для меня, но я стараюсь и определить целевую ОС, как это было предложено решением в случае, если он не был правильно идентифицирован автоматически. Добавление GTEST_OS_WINDOWS = 1 и/или GTEST_OS_WINDOWS_DESKTOP = 1 в проектах не изменило ничего.
Я понимаю, что это легко можно зафиксировать в этом случае, просто указав правильный тип вместо автоматического использования, но я хотел бы найти решение для этого, если это возможно. Замена авто и отсутствие опции -std = C++ 11 позволяет коду работать так, как предполагалось, так что библиотека работает.
Я использую Code :: Blocks 13.12, MinGW/g ++ 4.8.1-4 и Google Mock 1.7 в Windows.
Спасибо за чтение =)
Попробуйте '--std = gnu ++ 11' – sjdowling
Спасибо, что я работал! Кажется, не получается, как отметить отличный ответ в качестве ответа на вопрос. Я постараюсь понять это. – Pzc