Подтвердить что ты не робот

Почему класс допускает статический член сам по себе, но не нестатический член?

class base {
public:
    base a;
};

Он дает ошибку компиляции.

class base {
public:
    static base a;
};

тогда как этот код не дает ошибки компиляции

4b9b3361

Ответ 1

Потому что члены класса static не хранятся в экземпляре класса, поэтому static будет работать.

Сохранение объекта внутри другого объекта того же типа приведет к поломке среды выполнения - бесконечный размер, правильно?

Что вернет sizeof? Размер объекта должен быть известен компилятору, но поскольку он содержит объект того же типа, это не имеет смысла.

Ответ 2

Я предполагаю, что ошибка похожа на

Поле

'имеет неполный тип

Это связано с тем, что, когда не статично, класс A не полностью определен до закрытия фигурной скобки. С другой стороны, переменные статического члена нуждаются в отдельном шаге определения после полного определения класса, поэтому они работают.

Найдите разницу между декларацией и определением для более подробных объяснений.