Да, с вложенным классом здесь все в порядке.
Обратите внимание, что для обеспечения организованности кода я бы не поместил определение B
в A
.Вместо этого:
class A
{
class B;
};
class A::B
{
};
Помимо прочего, это позволяет помещать определение класса A::B
в файл реализации А.
РЕДАКТИРОВАТЬ: Поскольку, как представляется, существует некоторая путаница относительно того,вложенный класс получает доступ к закрытым членам содержащего класса, я предоставляю фрагмент кода, чтобы доказать, что он делает:
class A
{
int x;
class B
{
int func(A* p) { return p->x; }
};
};
Вариант без встроенного определения A::B
, также допускается:
class A
{
int x;
class B;
};
class A::B
{
int func(A* p) { return p->x; }
};
- Comeau: Принято (оба варианта)
Ваши результаты теста Comeau C / C ++ следующие:
Comeau C / C ++ 4.3.10.1 (6 октября 2008 11:28:09) для ONLINE_EVALUATION_BETA2 Copyright 1988-2008 Comeau Computing.Все права защищены.РЕЖИМ: строгие ошибки C ++ noC ++ 0x_extensions
В строгом режиме, с -tused, Compile успешно (но помните, онлайн-компилятор Comeau не связывает).Скомпилировано с расширениями C ++ 0x DISabled.