gcc:Weffc ++与Wextra和成员初始化

时间:2011-08-02 21:24:25

标签: c++ gcc

假设我有这样一个类:

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,如果它有任何区别。

那么,我应该怎么做呢?

3 个答案:

答案 0 :(得分: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)
{}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

你有没有尝试过:

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