请考虑以下代码:
#include <stdio.h>
namespace EnclosingNmspc
{
namespace Nmspc
{
extern int a;//This a and the a defined above denote the same entity
int a=5;
}
}
extern int a;
int main()
{
printf("%d\n",a);
}
有来自3.5 / 2的引用:
当名称具有外部链接时,它表示的实体可以是 来自其他翻译单位范围的名称或来自 同一翻译单位的其他范围。
我不明白为什么这个规则在我的情况下不起作用?我有undefined reference
个链接器错误。
答案 0 :(得分:0)
您的问题已经回答there canonically。
您已经错过了在不同的编译单元中定义::a
。
int a=5;
实际上在同一范围内定义extern int a;
。但是
printf("%d\n",a);
在您的主程序中。要检查命名空间中的内容,请尝试
printf("%d\n",EnclosingNmspc::Nmspc::a);