2011-02-28 12 views
0
//header file 
class Foo 
{ 
    public: 
    struct FooBar { 
     bool ok; 
     string msg; 
    }; 
}; 

// .cpp file 
Foo::FooBar::FooBar():ok(false), msg("hello") 
{} 

컴파일하려고 할 때, 나는 얻을 :상자의 클래스의 초기화 목록 질문

오류 : 암시 적 선언 '푸 :: FOOBAR :: FOOBAR()'

바보, 간단한의 정의 범위와 관련된 실수 나는 확신하지만, 그것이 무엇인지 알아낼 수 없다. ...

답변

5

선언하지 않은 생성자를 구현하려고한다. 이런 식으로 선언 : 당신은 생성자를 선언 할 필요가

//header file 
class Foo 
{ 
    public: 
    struct FooBar { 
     FooBar(); 
     bool ok; 
     string msg; 
    }; 
}; 

// .cpp file 
Foo::FooBar::FooBar():ok(false), msg("hello") 
{} 
1

, 당신은 클래스의 생성자의 선언을 생략하는 경우 즉

class Foo 
{ 
    public: 
    struct FooBar { 
     FooBar(); // <-- needed 
     bool ok; 
     string msg; 
    }; 
}; 
1

, 암시 적 생성자 정의는 컴파일러에 의해 생성됩니다. 이 경우 기본 생성자를 정의했지만 선언하지 않았으므로 컴파일러는 현재 진행중인 작업을 혼동합니다. 따라서 암시 적으로 정의 된 기본 생성자를 정의하는 것에 대해 불평하고 있습니다.

해결책은 기본 생성자 정의를 사용할 수 있도록 기본 생성자를 선언하는 것입니다.