Я знаю два способа объявления неучтенного класса внутри тела класса.Как переадресовать неустановленный класс в тело класса без поддержки или объявления указателя
Первый является:
class A
{
friend class B; // B is forward-declared + friend
};
И второе:
class A
{
class B* ptr; // B is forward-declared + pointer
};
Можно вперед-объявить класс вне тела класса, но по какой-либо причине давайте забудем об этом варианте;
Итак, я хотел бы сделать возможным объявить такой член:
class A
{
/* somehow declare B in the body*/
B* getInstanceB();
};
Стоит отметить, что: С объявить указатель:
class A
{
class B* pointer;
B* getInstanceB(); //fine
};
С другим объявлением:
class A
{
friend class B;
B* getInstanceB(); //GCC 5.3.0 issues error, MSVC compiles
};
Я глубоко сожалею, что такого синтаксиса форвардного объявления нет :
class ::[optional-namespace::]ClassName
;
, который будет отличать декларацию вперед вложенного класса от непрошенного класса forward-declaration. Возможно ли это сделать в текущем стандарте каким-то другим способом?
Что случилось с вперед объявляя 'b' вне' Ā'? – erenon
@erenon Нет ничего плохого. Но если есть еще одна возможность, я бы с удовольствием это узнал :) – xinaiz
Позвольте мне получить это.Вы пытаетесь выяснить, существует ли другое решение проблемы, когда существует существующее решение, и оно работает нормально. –