Ошибка в gtest-printers.h при интеграции GTest в мой проект - PullRequest
1 голос
/ 02 января 2012

Я получаю следующую ошибку при создании моего проекта

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 следующим образом,

void startGTest()
{

char *option[] = { "test.exe", //it doesn't have meaning, just dummy
               "--gtest_output=xml:gTestResults.xml" };
int argc = 2;

testing::InitGoogleTest(&argc, option);
RUN_ALL_TESTS(); 
}

Дополнительная информация,

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 ++ -> Обработка предупреждения как ошибки -> НЕТ

Тогда я могу построить и запустить.

Ответы [ 2 ]

1 голос
/ 25 января 2012

Полагаю, вы получаете эту ошибку, потому что вы кросс-компилируете для 32-битной платформы на 64-битной машине.Я тоже это понимаю, и это именно то, что я делаю.Документация от 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
0 голосов
/ 22 января 2015

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

...