假设我有一堂这样的课:
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,如果它有什么不同的话。
那么,我该怎么办呢?
最佳答案
在此实例中,您实际上并未使用成员初始化列表。
要在这种情况下使用成员初始化列表,您的构造函数实现将如下所示:
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)
{}
关于c++ - gcc:带有 Wextra 和成员初始化的 weffc++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6918826/