2011-08-02 2 views
2

gcc : Wextra 및 멤버 초기화가있는 weffC++

다음과 같은 클래스가 있다고 가정 해 보겠습니다.

class MyClass { 
    private: 
     vector<MyOtherClass> myMember; 
    public: 
     MyClass(const YetAnotherClass& myCollection); 
} 

MyClass::MyClass(const YetAnotherClass& myCollection) { 
    myMember = convert(myCollection); 
} 

또는 다른 클래스의 멤버가있는 클래스가 있습니다.

이제 weffc++ 플래그는 어리석은 실수를 잡아 내고 컴파일러를 훨씬 더 유용하게 만듭니다. 동시에, 저는 실수를 고쳐야하기 때문에 xxx26을 좋아합니다.

문제는 코드가 컴파일되지 않는다는 것입니다 ("MyClass :: myMember가 멤버 초기화 목록에서 초기화되어야 함"). 나는 myMember을 포인터로 만들고 NULL로 설정할 수 있다고 생각하지만 그렇게하지는 않을 것입니다. 나는 또한 좋은 아이디어가 될지 모르지만 경고를 사용하지 못하게하는 방법을 찾을 수 없다.

차이가 있다면 GCC 4.5.2를 사용하고 있습니다.

그러면 어떻게해야합니까?

답변

6

이 인스턴스에는 실제로 회원 초기화 목록이 사용되지 않습니다.

이 경우 멤버 초기화 목록을 사용하려면 생성자의 구현은 다음과 같습니다

MyClass::MyClass(const YetAnotherClass &myCollection) 
: myMember(convert(myCollection)) 
{ 
} 

멤버 초기화 목록은 콜론 다음 멤버 변수의 쉼표로 구분 된 목록입니다. 여러 회원 초기화는 다음과 같이 보일 것입니다 :

class MyClass 
{ 
public: 
    MyClass(); 

private: 
    SomeType someMember; 
    SomeOtherType someOtherMember; 
    AnotherType anotherMember; 
}; 

MyClass::MyClass() : 
    someMember(a), 
    someOtherMember(b), 
    anotherMember(5) 
{} 
0
MyClass::MyClass(const YetAnotherClass& myCollection): 
myMember(convert(myCollection)) 
{ 
} 
0

당신이 시도해 봤어 :

MyClass::MyClass(const YetAnotherClass& myCollection) 
: myMember(convert(myCollection)) 
{ 
}