가능한 중복 :
Why is it an error to use an empty set of brackets to call a constructor with no arguments?
Most vexing parse: why doesn't A a(()); work?복사 작업이 종료 된 후 잘못된 개체가 발생 했습니까?
이 하나가 나에게 화를 가져옵니다. 어쩌면 너무 단순합니다.
struct Foo
{
Foo() {}
Foo(const Foo& f) {}
void work() {}
};
int main()
{
Foo f(Foo());
f.work();
}
GCC 4.6이 날 제공 :
error: request for member ‘work’ in ‘f’, which is of non-class type ‘Foo(Foo (*)())’
유효 코드처럼 보일 수 있습니다 복사 작업의 생략 후 :
int main()
{
Foo f;
f.work();
}
하지만 난 work()
를 호출 할 수없는 이유?
편집 :
예 (아래 참조). 이 증상의 원인이 내가 예상하지 못했던 곳이기 때문에 먼저 검색 할 때 원래 게시물을 찾지 못했습니다.
왜'Foo f (Foo());'라고 써야할까요? 처음에는'Foo f;'를 쓰면 무엇이 잘못 되었습니까? 첫 번째 버전은 오류 메시지에서 볼 수있는 것과 완전히 다른 유형을 만듭니다. – Nobody
물론 약간 학문. 어떤 생성자가 호출되는지 연구에서 유래했습니다. – ritter