注册 登录
编程论坛 C++教室

想用const变量初始化数组(位于不同文件)

pqsusu1 发布于 2009-08-14 20:30, 1814 次点击
这样写:
//在a.cpp源文件中有以下定义
const int  i = 1;

//main.cpp
extern const int i; //告诉编译器变量i在其它文件已定义
int a[i];  //报错

我是想在a.cpp中定义了const int i后在所有文件中都可以用.
但我在main.cpp中使用i来定义数组时编译报错,有什么好的解决办法呢?器

[ 本帖最后由 pqsusu1 于 2009-8-14 23:39 编辑 ]
8 回复
#2
zinc2009-08-14 21:47
const int i = 1;
#3
xufen3402009-08-14 21:47
没错阿
#4
ly8610142009-08-15 00:20
回复 楼主 pqsusu1

一般来说,
当该const变量是用常量表达式初始化时,一般都把这样的const变量定义在头文件中,这时在其他文件就只需包含该头文件就能用该变量,定义和声明时都不加extern;
当该const变量不是用常量表达式初始化,那么它就不应该在头文件中定义,定义和声明时都需要加extern.

 
所以通常的做法是,把const int i = 1;放在头文件中,这样就用不着extern了,直接在main.cpp中包含那个头文件即可。
当然你也可以采取另一种做法,即在a.cpp中应该是extern const int i = 1; 在main.cpp中是extern const int i;不过这种做法不提倡。
#5
leeco2009-08-15 13:00
不要在头文件中定义变量,头文件只负责声明
#6
pqsusu12009-08-15 17:03
以下是引用leeco在2009-8-15 13:00的发言:不要在头文件中定义变量,头文件只负责声明
那么请问对于一楼的情况,应该如何处理呢?
#7
无语随风2009-08-15 20:37
首先应该查看你定义的const变量是不是全局变量,只有全局变量才能被访问,ectern是不能用来声明局部变量的,你可以查看下。
#8
ly8610142009-08-17 07:50
回复 楼主 pqsusu1

最简单的做法就是
//a.cpp
extern const int i = 1;

//main.cpp
extern const int i;
#9
ly8610142009-08-17 07:56
回复 楼主 pqsusu1

如果是在所有文件中都可用的话,
//a.cpp
extern const int i = 1;

//a.h
extern const int i;

在需要用到i的文件里#include "a.h"即可

1