2011-08-02 35 views
2

假设我有一个这样的类:GCC:weffC++与Wextra和成员初始化

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

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

或者,换句话说,我有一个类这是一些其他的数据转换为可随后使用的部件。

现在,weffc++标志有助于捕捉一些愚蠢的错误,并使编译器更有帮助。同时,我喜欢Wextra,因为它迫使我纠正错误。

问题是代码不能编译(“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)) 
{ 
}