gcc: weffc ++ с Wextra и инициализацией члена - PullRequest
2 голосов
/ 03 августа 2011

Предположим, у меня есть такой класс:

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 ]

6 голосов
/ 03 августа 2011

Вы на самом деле не используете список инициализации члена в этом случае.

Чтобы использовать список инициализации члена в этом случае, ваша реализация конструктора будет выглядеть следующим образом:

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 голосов
/ 03 августа 2011

Вы пробовали:

MyClass::MyClass(const YetAnotherClass& myCollection)
: myMember(convert(myCollection))
{
}
0 голосов
/ 03 августа 2011
MyClass::MyClass(const YetAnotherClass& myCollection): 
myMember(convert(myCollection))
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...