2012-01-02 3 views
0

Iam получают следующее сообщение об ошибке при построении моего проектаОшибка в GTEST-printers.h пока Intergrating GTEST к моему проекту

C:\gtest\gtest-1.6.0\include\gtest/gtest-printers.h(327) : error C2220: warning treated as error - no 'object' file generated 
C:\gtest\gtest-1.6.0\include\gtest/gtest-printers.h(376) : see reference to function template instantiation 'void testing::internal::DefaultPrintTo<const void>(testing::internal::IsNotContainer,testing::internal::true_type,T *,std::ostream *)' being compiled 
    with 
    [ 
     T=const void 
    ] 
    C:\gtest\gtest-1.6.0\include\gtest/gtest-printers.h(416) : see reference to function template instantiation 'void testing::internal::PrintTo<To>(const T &,std::ostream *)' being compiled 
    with 
    [ 
     To=const void *, 
     T=const void * 
    ] 
C:\gtest\gtest-1.6.0\include\gtest/gtest-printers.h(327) : warning C4826: Conversion from 'const void *' to 'testing::internal::UInt64' is sign-extended. This may cause unexpected runtime behavior. 

Я инициализируется InitGoogleTest следующим образом,

Некоторых подробнее,

int main(int argc, char** argv) 
{ 
char *option[] = { "test.exe", //it doesn't have meaning, just dummy 
      "--gtest_output=xml:gTestResults.xml" }; 
int myargc = 2; 
testing::InitGoogleTest(&myargc, option); 
RUN_ALL_TESTS(); 
getchar(); // keep console window open until Return keystroke 
} 

бросает также ошибку,

1>c:\...\gtestfactorial\gtestfactorial\gtestfactorial.cpp(4) : error C2220: warning treated as error - no 'object' file generated 

Если параметр компилятора изменяется следующим образом в собственности проекта,

C/C++ -> Лечение предупреждения как ошибки -> NO

Затем IAM смог построить и запустить.

ответ

0

Я предполагаю, что вы получаете эту ошибку, потому что вы перекрестно компилируете 32-битную платформу на 64-битной машине. Я получаю это, и это именно то, что я делаю. documentation от Microsoft говорит

Это предупреждение означает, что компилятор выполняется знаковое расширение при 32-битный указатель был отлит переменной с 64-битным.

Это предупреждение отключено по умолчанию, но Google помещает предупреждение как ошибки, чтобы быть уверенным в том, что любой может построить его продукт. Вы можете отключить его, но Microsoft заявляет, что было бы безопаснее отключать расширение знака вручную, если возникает ошибка при выборе типа указателя, который является тем, что происходит здесь.

С моей стороны, я в конечном итоге изменить код, который генерирующая ошибку с:

// Disable this code for cross compiling on 32 bits machine 
// GTEST_OS_WINDOWS will always be defined when compiling on a Windows machine. 
// GTEST_OS_TARGET_PLATFORM is defined by us when running CMake 
#if GTEST_OS_WINDOWS && !GTEST_OS_TARGET_PLATFORM 
     *os << reinterpret_cast<const void*>(
      reinterpret_cast<internal::UInt64>(p)); 
#else 
     *os << reinterpret_cast<const void*>(
      static_cast<internal::UInt64>(
      reinterpret_cast<internal::UInt32>(p))); 
#endif 
-1

Скопируйте весь журнал ошибок в одном файле и искать метки «ошибки». Вы найдете что-то релевантное, как заголовочный файл, не объявленный или переадресованный объявлением объекта, неопределенной ссылкой. Эта ошибка не имеет ничего общего с gtest.