2013-04-02 3 views
1

는 다음 클래스 받아 제작 : 때문에 푸내 생성자 건설에 대해 적어도 하나 개의 값을 지정하고, 아직이 될 수있는 기본은

class Foo{ 
public: 
    Foo(std::string bar_, int baz_ = 7) 
    :bar(bar_) 
    ,baz(baz_) 
    {} 

private: 
    std::string bar; 
    int baz; 
}; 

을 (표준 : : 문자열 bar_, INT baz_ = 7); 내 유일한 생성자, 컴파일러가 나를 위해 기본 생성자를 구현해서는 안됩니다? 이 클래스를 구성 할 수있는 유일한 두 가지 방법은 다음과 같습니다.

Foo foo("foo"); 
//or 
Foo foo("foo",0); 
//plus copy constructor and overloaded assignment operator. 

그러나 이것이 가능한 이유는 무엇입니까?

int main(){ 

    Foo foo(); 
} 

유일한 공용 생성자가 첫 번째 매개 변수의 값을 요구할 때 클래스를 어떻게 구성 할 수 있는지 이해할 수 없습니다. 기본 생성자를 private로 만들거나 C++ 11을 삭제하려고해도 아무런 차이가 없습니다. 어떻게 된 일인가? Foo foo(); 때문에
http://ideone.com/CL7IZo

+0

main에서'foo' 심볼은 Foo 유형의 인스턴스가 아닌 함수입니다. – mythagel

+4

괄호없이 객체를 인스턴스화 해 봅니다 (영어로 작성하는 방법). http://en.wikipedia.org/wiki/Most_vexing_parse :) – Nbr44

+1

왜이 정확한 구문 문제가 마지막으로 세 번 나옵니 까? 10 시간? – chris

답변

6

Foo를 반환하고 인수가없는 함수의 전방 선언입니다. 대신 Foo foo;을 사용하면 오류가 발생합니다.