Вложенный класс. ошибка: ожидание объявления параметров - для внутреннего экземпляра класса

Я начал изучать вложенные классы в C++, я попробовал быстрый код, который я вставил сюда, чтобы посмотреть, как работают вложенные классы. Но компиляция заканчивается некоторыми ошибками, которые я не могу понять.

Файл: check.cpp

class Outside{
    public:
        class Inside{
            private:
                int mInside;
            public:
                Inside(const int& x):mInside(x){}
        };
    private:
        Inside mOutside(20);
};

int main(void){
Outside o;
return 0;
}

Ошибка, которую я получаю при компиляции g++ -Wall -std=c++11 -o check.out check.cpp

check.cpp:12:25: error: expected parameter declarator
        Inside mOutside(20);
                        ^
check.cpp:12:25: error: expected ')'
check.cpp:12:24: note: to match this '('
        Inside mOutside(20);
                       ^

Мне нужно хорошее объяснение этой ошибки и как преодолеть эту ошибку.

2 ответа

Решение

Вы должны использовать = или же {} для инициализации элемента на месте:

// ...
private:
    Inside mOutside = 20;

Форма скобок будет неоднозначной (ее можно спутать с объявлением функции).


Inside mOutside{20};

С clang++ это вызывает предупреждение:

предупреждение: приватное поле 'mInside' не используется [-Wunused-private-field]

и у компилятора есть смысл. Странная вещь - пропущенное предупреждение с другой формой (=).

Попробуйте использовать этот способ инициализации члена.

Inside mOutside = Inside(20);

Да, ваше решение сработало, спасибо. Но как? Зачем?

См. Инициализация баз и членов в open-std.

Другие вопросы по тегам