3
에 BOOST_CHECK_THROW에 대해 불평. 컴파일러는 Foo에 적절한 기본 생성자 (VC++ 2005)가 없다고 불평합니다. 기본 생성자를 추가하면 작동하며 실제로 호출됩니다. 왜이 문장은 기본 생성자가 필요합니까?컴파일러 다음은 컴파일되지 않습니다 생성자
에 BOOST_CHECK_THROW에 대해 불평. 컴파일러는 Foo에 적절한 기본 생성자 (VC++ 2005)가 없다고 불평합니다. 기본 생성자를 추가하면 작동하며 실제로 호출됩니다. 왜이 문장은 기본 생성자가 필요합니까?컴파일러 다음은 컴파일되지 않습니다 생성자
이것은 BOOST_CHECK_THROW
매크로이고 Foo(bar)
은 문으로 확장 되었기 때문에 발생합니다. 컴파일러는이 명령문을보고 기본 선언자가 필요한 변수 선언 Foo bar;
으로 해석합니다. 즉
BOOST_CHECK_THROW(Foo temp(bar), std::logic_error);
이 BOOST_CHECK_THROW
이
try
{
Foo(bar);
// ... fail test ...
}
catch(std::logic_error)
{
// ... pass test ...
}
처럼 뭔가 확장되고 컴파일러라는 변수의 선언으로 Foo(bar);
해석된다
이 솔루션은 변수의 이름을 지정하는 것입니다 바. 하나는 간단한 프로그램으로이를 확인할 수 있습니다
struct Test
{
Test(int *x) {}
};
int main()
{
int *x=0;
Test(x);
return 0;
}
는 사실
test.cpp: In function ‘int main()’:
test.cpp:10: error: conflicting declaration ‘Test x’
test.cpp:9: error: ‘x’ has a previous declaration as ‘int* x’
++ g과 함께 다음과 같은 오류를 제공한다. 감사. –