Если myobject
объявлено в этом пространстве имен, и вы хотите объявить его снова (для определения), вы делаете это с префиксом его имени, а не его типа.
ClassA ABC::XYZ::myobject;
Если его тип также объявлен в этом пространстве имен, вам также необходимо добавить префикс имени типа
ABC::XYZ::ClassA ABC::XYZ::myobject;
Редко нужно заново объявлять такой объект. Часто первое объявление объекта также является его определением. Если вы хотите сначала объявить объект, вы должны сделать это в этом пространстве имен. Следующее объявляет и определяет «myobject»
namespace ABC {
namespace XYZ {
ClassA myobject;
}
}
Если вы определили объект таким образом, вы ссылаетесь на него, говоря ABC::XYZ
. Вам не нужно как-то «объявлять» этот объект, чтобы использовать его локально
void f() {
ABC::XYZ::myobject = someValue;
// you *can* however use a using-declaration
using ABC::XYZ::myobject;
myobject = someValue;
}