VS2008编译环境下全局const变量在其他编译模块中引用注意的问题
2012-02-13 11:11
405 查看
2012/2/13
By RaySaint
在VS2008中编写C++程序时碰到如下问题:
main.cpp中声明了一个全局const变量:
//! main.cpp
...
const int a = 10;
...
接着在某个类的实现文件中,如consumerthread.cpp中定义的某个成员函数内部使用的该变量(当然,先在该文件头部extern声明该变量)
//consumerthread.cpp
...
extern int a;
[align=left]void ConsumerThread::run()[/align]
[align=left]{[/align]
[align=left] cout << "a=" << a << endl;[/align]
[align=left]}[/align]
[align=left]虽然上述代码编译可通过,但在链接时会报错提示找不到const int a的定义。[/align]
[align=left]原因:[/align]
[align=left]在C++中当一个全局变量声明为const时,默认情况下为文件内链接,也就是说:[/align]
[align=left]const int a = 10;[/align]
[align=left]相当于[/align]
[align=left]static const int a = 10;[/align]
[align=left]因此,需要显示的告诉编译器你所声明的全局const变量是外部存储的:[/align]
[align=left]//! main.cpp[/align]
[align=left]...[/align]
[align=left]extern const int a = 10; //正确![/align]
[align=left]...[/align]
[align=left] [/align]
[align=left]P.S. 经同学验证,gcc下不会出现该问题.[/align]
By RaySaint
在VS2008中编写C++程序时碰到如下问题:
main.cpp中声明了一个全局const变量:
//! main.cpp
...
const int a = 10;
...
接着在某个类的实现文件中,如consumerthread.cpp中定义的某个成员函数内部使用的该变量(当然,先在该文件头部extern声明该变量)
//consumerthread.cpp
...
extern int a;
[align=left]void ConsumerThread::run()[/align]
[align=left]{[/align]
[align=left] cout << "a=" << a << endl;[/align]
[align=left]}[/align]
[align=left]虽然上述代码编译可通过,但在链接时会报错提示找不到const int a的定义。[/align]
[align=left]原因:[/align]
[align=left]在C++中当一个全局变量声明为const时,默认情况下为文件内链接,也就是说:[/align]
[align=left]const int a = 10;[/align]
[align=left]相当于[/align]
[align=left]static const int a = 10;[/align]
[align=left]因此,需要显示的告诉编译器你所声明的全局const变量是外部存储的:[/align]
[align=left]//! main.cpp[/align]
[align=left]...[/align]
[align=left]extern const int a = 10; //正确![/align]
[align=left]...[/align]
[align=left] [/align]
[align=left]P.S. 经同学验证,gcc下不会出现该问题.[/align]
相关文章推荐
- 新内核模块引用其他模块中的全局变量,编译报错处理方式
- Python全局变量在模块之间引用的问题
- 头文件中定义 const 全局变量应注意的问题
- 头文件中定义 const 全局变量应注意的问题
- 头文件中定义const全局变量应注意的问题
- 用vs编译动态库需要注意的问题,全局变量初始化
- c++引用全局变量应注意的问题
- const 全局变量应注意的问题
- 头文件中定义const全局变量应注意的问题
- 头文件中定义 const 全局变量应注意的问题
- golang 生产环境编译一定要注意的内存爆炸问题
- 公共类引用需注意的编译问题
- Window Services的调试和非托管dll的引用及其他一些注意问题
- C++编译的环境变量问题
- ant编译时环境变量及错误提示问题
- VS2008环境下开发的某些程序在其他机器运行提示“由于应用程序配置不正确,应用程序未能启动”的问题(IIS)
- 配置ant的环境变量时应注意的问题
- vs2008如何新建自己工程的环境变量(局部)和 Windows系统(全局)
- 零基础学python-16.5 模块间全局变量的修改以及其他访问全局变量的方法
- Window Services的调试和非托管dll的引用及其他一些注意问题