此变量在xyz.cpp中定义
const int i = 10;
下面的main()方法是用abc.cpp
编写的void main()
{
cout<<i; //trying to access 'i' from a different .cpp file
}
答案 0 :(得分:10)
您需要在abc.cpp中声明extern
:
extern const int i;
编辑:如下面的评论中所述,在C ++中(与C不同),要提供const
变量外部链接,您还需要声明它extern
在xyz.cpp中:
extern const int i = 10;
参考:MSDN
答案 1 :(得分:5)
最简单的方法是在标题中将其声明为const static int i=10;
,并在需要该常量的所有.cpp
中包含该标头。这将允许编译器在每个目标文件中“内联”它,仍然避免ODR违规。
--- ---编辑
实际上,在C ++中,static
不是必需的,因为const
对象默认具有内部链接。但是在C中,你必须把static
(并且在C ++中它没有受到伤害)。
为什么这比extern
方法更好?这是因为:
const
变量(这就是为什么它们默认具有内部链接的原因)。const
声明,然后你的常数就只有#include
了。extern
- 声明变量的定义,因此无法通过将其实际值作为生成的机器代码中的立即值来优化它,它无法消除分支使用该常量值无法达到...当然,跨模块优化(“链接时间代码生成”,“整个程序优化”,......)确实存在,但目前编译器具有更高级的优化器比连接器。答案 2 :(得分:3)
在其前面添加关键字extern
。
在abc.cpp
中声明为:
extern const int i = 10;
C ++中的 const
变量在C ++中具有内部链接(与C不同)。因此,为了能够在另一个文件中使用它,您必须明确地将其声明为具有外部链接。
答案 3 :(得分:2)
将此全局变量放入标题,并在要使用它的所有.cpp文件中将此标题#include
。
xyz.h:
const int i = 10;
xyz.cpp:
#include "xyz.h"
void main()
{
cout << i;
}
或者如果你想避免为此目的使用header,你可以在xyz.cpp中将它声明为extern const int i = 10;
,但是你也必须在abc.cpp中声明这个变量,所以你应该写{{ 1}}在abc.cpp的开头为了使用它。
答案 4 :(得分:1)
与使用extern变量的方式相同。 在文件xyz.cpp中:
extern const int i = 333;
在文件abc.cpp中:
extern const int i;
cout << i;