为什么const对象在c ++中是本地文件?

时间:2018-12-17 11:33:27

标签: c++

请考虑以下a.cppb.cpp文件:

ebra@him:/tmp$ cat a.cpp 
const int i = 5;

ebra@him:/tmp$ cat b.cpp 
int main()
{
  extern int i;
  return i;
}

ebra@him:/tmp$ g++ *.cpp
/tmp/ccqBWi4e.o: In function `main':
b.cpp:(.text+0x6): undefined reference to `i'
collect2: error: ld returned 1 exit status

问题是我如何使用ia.cpp文件中声明的b.cpp变量?

请注意

  1. 我也在const内添加了关键字b.cpp,但没有任何变化。
  2. 我对staticstatic const变量也遇到同样的问题!

2 个答案:

答案 0 :(得分:4)

在C ++中,当您在命名空间范围内将变量声明为const时,它会自动具有内部链接。添加static也会产生内部链接,无论有没有const

因此,它们在翻译单元之外不可用,因此出现链接器错误。

答案 1 :(得分:0)

将其放在头文件中,这样它们都具有相同的值(不同的变量,相同的名称,相同的值)。

我认为您也可以重写以使其成为外部链接,但这将使您一无所获:行为无变化;对于int,效率没有改善。