Вложенный класс. ошибка: ожидание объявления параметров - для внутреннего экземпляра класса
Я начал изучать вложенные классы в 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);
Да, ваше решение сработало, спасибо. Но как? Зачем?