При попытке инициализации члена класса, являющегося при этом объектом вложенного класса, возникает ошибка. Вот код:
class rage
{
public:
rage() { }
private:
class test
{
public:
test(int y) { }
};
test heythere(5); // <-- Ошибка тут
};
int main()
{
}
Visual Studio кричит об ошибке в строчке test heythere(5);, подчеркивает 5 и говорит, что требуется спецификатор типа, но это мало мне о чём говорит.
test heythere(5);
main.cpp:31:19: error: expected identifier before numeric constant
main.cpp:31:19: error: expected ',' or '...' before numeric constant
Если вы инициализируете поле прямо в теле класса, нужно использовать либо = …, либо {…}.
(…) - нельзя. Видимо потому, что в таком случае для компилятора становится слишком сложно отличить объявление поля с инициализатором от объявления метода (где скобки были бы списком параметров).
На это намекает даже название такого инициализатора в грамматике языка: brace-or-equal-initializer.
Подойдет один из следующих вариантов, на выбор:
test heythere = 5;
test heythere = test(5);
test heythere{5};
test heythere = {5};
test heythere = test{5};
Конкретно в этом случае все пять ведут себя совершенно одинаково, но в общем случае между ними есть разница. Подробнее тут: https://en.cppreference.com/w/cpp/language/initialization
Еще вариант: Оставить только test heythere;, а инициализацию выполнять в списке инициализации в конструкторе: rage() : heythere(5) {...}. (Либо : heythere{5}.)
Продвижение своими сайтами как стратегия роста и независимости