如何在头文件中声明extern 2d-array?

时间:2011-12-20 20:31:06

标签: c header extern multidimensional-array

我们在LCD.c中有这个声明:

unsigned char LCD[8][64] = {((unsigned char) 0)};

在LCD.h中我们希望有类似的东西:

extern unsigned char LCD[][];

我们收到此错误:

Error[Pe098]: an array may not have elements of this type

7 个答案:

答案 0 :(得分:17)

您至少需要包含二维数组的最右列大小。您可以这样声明:

extern unsigned char LCD[][64];

否则编译器将无法计算第一行之后的偏移量。

答案 1 :(得分:2)

在C中,数组不包含有关其每个维度的大小的信息。因此,编译器需要知道除第一个维度之外的每个维度有多大。因此,要纠正这种情况,请执行以下操作:

lcd.h用于:

#define MINOR 64
extern unsigned char LCD[][MINOR];

LCD.c:

unsigned char LCD[8][MINOR] = {((unsigned char)0)};

(编辑:抱歉,我在开始时弄乱了一些东西,现在修好了。)

答案 2 :(得分:2)

尝试指定数组的尺寸。在C中,对于多维数组,只能指定一个维度。

像这样:

extern unsigned char LCD[][64];

答案 3 :(得分:1)

对于多维数组,必须指定除第一个维之外的所有维。所以......

extern unsigned char LCD[][64];

应该这样做。

答案 4 :(得分:0)

在头文件中添加如下声明:

extern unsigned char LCD[8][64];

答案 5 :(得分:0)

如果你没有定义二维尺寸,那么

LCD阵列的尺寸会被拒绝!

sizeof refused : extern unsigned char LCD[][64];
sizeof accepted : extern unsigned char LCD[8][64];

它取决于你想要的东西!

答案 6 :(得分:0)

#include 使用命名空间标准;

int main(){

int n;
cout<<"Enter The Number"<<endl;
cin>>n;
int m;
cout<<"Enter The Second Number"<<endl;
cin>>m;

int array[n][m];

for (int i = 0; i < n; i++)
{
    for (int j = 0; j < m; j++)
    {
     cin<<array[i][j]<<endl;
    }
    
}

for (int i = 0; i < n; i++)
{

 for (int j = 0; j < m; j++)

 {
    cout<<array[i][j]<<" ";
 }

 cout<<endl;
}

返回0; }