#c #namespaces #forward-declaration
#c #пространства имен #прямое объявление
Вопрос:
У меня проблема с прямыми объявлениями и пространствами имен. Следующий пример кода:
namespace Waalkes
{
class Otto;
}
namespace Comedian
{
class MyClass : public ...
{
...
Waalkes::Otto getFun();
...
}
}
Обычно это не должно быть проблемой, «Waalkes:: Otto getFun()» напрямую ссылается на прямое объявление сверху. К сожалению, некоторые программисты решили также иметь пространство имен «Comedian::Waalkes», которое определено в одном из заголовков, включенных в этот код. Так происходит, что компилятор пытается найти «Comedian :: Waalkes :: Otto», которого не существует.
Поскольку невозможно избавиться от этих уродливых двойных имен: какие у меня есть варианты? Есть ли возможность определить getFun() таким образом, чтобы его возвращаемое значение ссылалось на правильное пространство имен «Waalkes:: Otto», а не на «Comedian :: Waalkes :: Otto» из-за включающего «пространство имен Comedian»? Возможно, какой-то родительский заполнитель пространства имен?
Спасибо!
Ответ №1:
Вы можете конкретно ссылаться на Waalkes
пространство имен в глобальном пространстве имен с ::Waalkes
помощью . Так что, если вам нужен Otto
класс в этом пространстве имен, сделайте ::Waalkes::Otto
.
Тем не менее, у вас все равно будет проблема. Вы не можете использовать неполный тип в качестве возвращаемого типа в определении функции.