假设我有一个这样的类:
class MyClass {
private:
vector<MyOtherClass> myMember;
public:
MyClass(const YetAnotherClass& myCollection);
}
MyClass::MyClass(const YetAnotherClass& myCollection) {
myMember = convert(myCollection);
}
Run Code Online (Sandbox Code Playgroud)
或者,换句话说,我有一个成员的类,其他一些数据转换为后来使用.
现在,该weffc++标志有助于捕获一些愚蠢的错误,并使编译器更有帮助.与此同时,我喜欢Wextra因为它迫使我修复我的错误.
问题是代码没有编译("MyClass :: myMember应该在成员初始化列表中初始化"),我不知道如何解决它.我想我可以制作myMember一个指针并将其设置为NULL,但我宁愿不这样做.我也找不到禁用警告的方法,虽然我不确定这也不是一个好主意.
我正在使用GCC 4.5.2,如果它有任何区别.
那么,我该怎么做呢?
在这个实例中,您实际上并没有使用成员初始化列表.
要在这种情况下使用成员初始化列表,您的构造函数实现将如下所示:
MyClass::MyClass(const YetAnotherClass &myCollection)
: myMember(convert(myCollection))
{
}
Run Code Online (Sandbox Code Playgroud)
成员初始化列表是冒号后的成员变量的逗号分隔列表.多个成员初始化看起来像这样:
class MyClass
{
public:
MyClass();
private:
SomeType someMember;
SomeOtherType someOtherMember;
AnotherType anotherMember;
};
MyClass::MyClass() :
someMember(a),
someOtherMember(b),
anotherMember(5)
{}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1470 次 |
| 最近记录: |