Прежде всего, имя класса не может начинаться с целого числа. Так что переименовав их:
class A
{
public:
int stuff;
private:
class B
{
public:
int stuffer;
private:
int x;
};
};
Во-вторых, поскольку вложенный класс B
находится в закрытом разделе, вы не можете получить к нему доступ за пределами области действия класса A
. B
доступно только для A
. А синтаксис объявления объекта типа B
будет B bObj;
в области действия A
.
Теперь вам следует сначала попробовать себя, прежде чем задавать дальнейшие вопросы!
Что касается вашего редактирования (добавленный вопрос): он не компилирует , потому что к тому времени, когда компилятор видит B temp
, он еще не видел определения B
, поэтому он говорит B
не объявлено!
Исправление очень простое. Объявите B
перед его использованием, что-то вроде этого:
class A
{
private:
class B
{
public:
int stuffer;
private:
int x;
};
public:
int stuff;
void helper(B temp, int d);
}; //<--- this is also fixed. your code has 'colon', instead semi-colon!
Также прочитайте комментарий в конце урока!