>source

저는 책을 따라가며 혼자서 단위 테스트를 배우려고 노력했습니다.

책의 code는 C++11 표준을 사용하며 다음과 같은 줄이 있습니다.

auto variable= function(parameter);

처음 컴파일했을 때 다음과 같은 경고가 표시되었습니다.

경고: 'auto'는 C++11에서 의미를 변경합니다. 그것을 제거하십시오 [-Wc++0x-compat]

큰 문제는 아닙니다. Project->빌드 옵션... 메뉴:

[ ] 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* 테스트::internal::posix::FDOpen(int, const char*)':|

|1779| 오류: 'fdopen'이 이 범위에서 선언되지 않았습니다.

이 문제를 검색하는 것은 나에게 거의 도움이 되지 않았지만 자동으로 올바르게 식별되지 않는 경우에 대비하여 제안된 솔루션인 대상 OS를 정의하려고 했습니다. 프로젝트에 GTEST_OS_WINDOWS=1 및/또는 GTEST_OS_WINDOWS_DESKTOP=1을 추가하면 변경된 사항이 정의되지 않습니다.

이 경우 auto를 사용하는 대신 올바른 유형을 제공하면 쉽게 해결된다는 것을 알고 있지만 가능하면 이에 대한 해결책을 찾고 싶습니다. auto를 대체하고 -std=c++11 옵션을 선택하지 않으면 code가 의도한 대로 작동하므로 라이브러리가 작동합니다.

Windows에서 Code::Blocks 13.12 , MinGW/g++ 4.8.1-4 및 Google Mock 1.7을 사용하고 있습니다.

읽어주셔서 감사합니다=)

sjdowling 감사합니다. 확실히 효과가 있었습니다! 그러나 질문에 대한 답변으로 귀하의 훌륭한 답변을 표시하는 방법을 찾지 못하는 것 같습니다. 나는 그것을 알아 내려고 노력할 것입니다.

Pzc2022-01-10 07:18:11
  • 답변 # 1

    여전히 같은 문제에 직면한 사람을 위한 답변: 이 문제의 원인은 CMakeLists 파일에 있을 수 있습니다. 컴파일러 플래그를 -std=c++ 대신 -std=gnu++로 설정하십시오. 그것을하는 한 가지 방법은 다음을 포함하는 것입니다.

    set(CMAKE_CXX_FLAGS "-std=gnu++0x")
    

    CMakeList 파일에.

  • 답변 # 2

    여기서 답은 선언이 누락된 함수에 있습니다._스트리프,_strdup그리고fdopen. 처음 두 개는 POSIX 기능의 Microsoft 버전입니다.스트립그리고strdup. POSIX 표준의 항목을 포함하지 않는 C++11 ISO 표준의 사용을 지정하고 있다는 점에 유의하십시오. 지정하여--std=gnu++11컴파일러에게 GNU 확장과 함께 C++11 및 POSIX의 하이브리드를 허용하도록 지시하는 것입니다.

    흥미롭게도 Linux의 GCC 4.8.2에서는 이것을 복제할 수 없으므로 Windows에서 컴파일할 때 Google Mock 헤더에서 다른 일이 발생할 가능성이 있습니다.

  • 이전 java : ThreadPoolExecutor의 스레드 수를 어떻게 확인할 수 있습니까?
  • 다음 DDD 판매자 및 구매자 엔터티 제안