Вы получаете правильные ответы, позвольте мне попробовать переформулировать:
class Namespace::Class;
Почему я должен это делать?
Вы должны сделать это, потому что термин Namespace::Class
говорит компилятору:
... ОК, компилятор. Иди найди
пространство имен с именем Namespace, а внутри
которые ссылаются на класс с именем Class.
Но компилятор не знает, о чем вы говорите, потому что он не знает пространства имен с именем Namespace
. Даже если бы существовало пространство имен с именем Namespace
, например:
namespace Namespace
{
};
class Namespace::Class;
это все равно не сработает, потому что вы не можете объявить класс в пространстве имен вне этого пространства имен. Вы должны быть в пространстве имен.
Таким образом, вы можете фактически объявить класс в пространстве имен. Просто сделайте это:
namespace Namespace
{
class Class;
};