外部联系意味着什么

时间:2014-05-24 14:20:42

标签: c++ extern linkage

请考虑以下代码:

#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个链接器错误。

1 个答案:

答案 0 :(得分:0)

您的问题已经回答there canonically

您已经错过了在不同的编译单元中定义::a

int a=5;实际上在同一范围内定义extern int a;。但是

无法访问
printf("%d\n",a);

在您的主程序中。要检查命名空间中的内容,请尝试

printf("%d\n",EnclosingNmspc::Nmspc::a);