请考虑以下a.cpp
和b.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
问题是我如何使用i
内a.cpp
文件中声明的b.cpp
变量?
请注意
const
内添加了关键字b.cpp
,但没有任何变化。 static
和static const
变量也遇到同样的问题!答案 0 :(得分:4)
在C ++中,当您在命名空间范围内将变量声明为const
时,它会自动具有内部链接。添加static
也会产生内部链接,无论有没有const
因此,它们在翻译单元之外不可用,因此出现链接器错误。
答案 1 :(得分:0)
将其放在头文件中,这样它们都具有相同的值(不同的变量,相同的名称,相同的值)。
我认为您也可以重写以使其成为外部链接,但这将使您一无所获:行为无变化;对于int,效率没有改善。