2012-06-06 4 views
4

선언 :없음 적절한 기본 생성자가 없습니다

class ClassOne 
{ 
    ClassOne (ClassTwo* classTwo, ClassThree const& classThree); 
} 

테스트 :

ClassTwo* classTwo; 
ClassThree classThree; 
EXPECT_NO_THROW (ClassOne (classTwo, classThree)); 

이 컴파일 및 실행,하지만 지금은로 변경 :

선언 :

class ClassOne 
{ 
    ClassOne (ClassThree const& classThree); 
} 

테스트 :

ClassThree classThree; 
EXPECT_NO_THROW (ClassOne (classThree)); 

"사용할 수있는 적절한 기본 생성자가 없습니다"와 함께 실패합니다.

다음 줄 컴파일 :

ClassOne classOne (classTwo, classThree); // First case 
ClassOne classOne (classThree); // Second case 

EXPECT_NO_THROW 할 수없는 하나 개의 매개 변수와 생성자에 대한 몇 가지 이유가 있습니까?

답변

4

이것은 gtest의 버그입니다. (매크로는 잘 모르지만).

#define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \ 
    if (::testing::internal::AlwaysTrue()) { statement; } 

귀하의 코드가 statementif 본문에 괄호에 싸여 경우 VS2012RC를 사용하여 컴파일 : 해결 방법으로

#define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \ 
    if (::testing::internal::AlwaysTrue()) { (statement); } 
//          ^  ^

, 당신이 할 수 있습니다

EXPECT_NO_THROW ((ClassOne (classThree))); 
+0

감사를 EXPECT_NO_THROW 궁극적에 확장 너 - 그건 효과가있다. 나는 이미 그것을 발견했다 : "EXPECT_NO_THROW (new ClassOne (classThree));" 일했다. – Mary

관련 문제