天天看点

C++ “an incomplete type” error(使用extern const 数组的问题)

        开发中遇到一个问题,要做的事情是这样事的,在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]
}
           

继续阅读