开发中遇到一个问题,要做的事情是这样事的,在File_1.cpp定义了一个const的数组,在File_2.cpp中需要使用这个数组。
File_1.cpp
// 声明和定义
extern const int s_data[] = {1, 2, 3};
File_2.cpp
// 声明
extern const int s_data[];
// 某函数使用
```cpp
int num = sizeof(s_data) / sizeof(int);
for (int i = 0; i < num; i++) {
// get and use s_data[i]
}
编译过程中总是发现下面的error
error: invalid application of ‘sizeof’ to an incomplete type ‘const int []’
int num = sizeof(s_data) / sizeof(int);
尝试了很多办法,也是解决不掉,参考《C++ Primer》对const的解释和提供的sample,对int变量的使用是没有问题,但是换成数组就不可以了。后来想明白,编译过程的时候虽然File_1.cpp有定义s_data,但是在File_2.cpp,”extern const int s_data[];”只是声明,编译过程的时候,sizeof(s_data)不清楚s_data的长度,必然会出现上面的error。那怎么解决这个问题呢?结合《C++ Primer》的例子,修改成下面的例子就可以了。
File_1.cpp
// 声明和定义
extern const int s_data[] = {1, 2, 3};
extern const int s_num = sizeof(s_data)/sizeof(int);
File_2.cpp
// 声明
```cpp
extern const int s_data[];
extern const int s_num;
// 某函数使用
```cpp
for (int i = 0; i < s_num; i++) {
// get and use s_data[i]
}