Этот вопрос уже обсуждался в ссылке
безымянное пространство имен в именованном пространстве имен но не было предоставлено совершенных ответов о том, как получить доступ к переменным безымянного пространства имен, вложенных в именованное пространство имен, если обе переменные совпадают
Рассмотрим этот код
namespace apple {
namespace {
int a=10;
int b=10;
}
int a=20;
}int main()
{
cout<<apple::b; //prints 10
cout<<apple::a; // prints 20
}
Безымянное пространство имен "variable a"
всегда скрыт Как получить доступ "variable a"
безымянного пространства имен?
Законно ли даже объявлять безымянные пространства имен в именованных пространствах имен?
безымянное пространство имен
"variable a"
всегда скрыт Как получить доступ"variable a"
безымянного пространства имен?
Похоже, вы просто не можете квалифицировать безымянное пространство имен за пределами вмещающего пространства имен.
Ну, вот как исправить неоднозначность:
namespace apple {
namespace {
int a=10;
}
int getPrivateA() {
return a;
}
int a=20;
}
int main() {
cout<<apple::getPrivateA() << endl;
cout<<apple::a << endl;
}
Увидеть Live Demo.
Хотя я знаю, что это не полностью отвечает на ваш вопрос (кроме того, допустимо ли вкладывать безымянные пространства имен в другое пространство имен).
Я должен исследовать, что стандартная спецификация c ++ с главами 3.4 и 7.3 чуть больше, чтобы дать вам определенный ответ, почему не возможно, что вы хотите сделать.
Я прочитал это на днях и у меня есть ответ для «Как получить доступ» к переменной «безымянного пространства имен?»
Я отвечаю на это, зная полностью, что это не идеально ответ, но это способ получить доступ к «а» из безымянного пространства имен.
#include <iostream>
#include <stdio.h>
namespace apple {
namespace {
int a=257;
int b=10;
}
int a=20;
}
using namespace std;
int main() {
int* theForgottenA;
// pointer arithmetic would need to be more modified if the variable before
// apple::b was of a different type, but since both are int then it works here to subtract 1
theForgottenA = &apple::b - 1;
cout << *theForgottenA; //output is 257
}