如何在头文件中声明外部二维数组?

10
我们在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个回答

22

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

extern unsigned char LCD[][64];
否则编译器将无法计算第一行之后的偏移量。

2

尝试指定数组的维度。在C语言中,多维数组只能有一个未指定的维度。

像这样:

extern unsigned char LCD[][64];

2

在C语言中,数组不包含其每个维度的大小信息。因此,编译器需要知道除第一个维度外每个维度的大小。所以,为了纠正这种情况,请按照以下步骤操作:

LCD.h:

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

LCD.c:

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

(编辑:抱歉,我一开始把事情搞糟了,现在已经修复了。)
抱歉,我无法看到需要翻译的具体内容,请提供更多信息让我可以帮助您进行翻译。

可能有用的是将#include“LCD.h”强调到LCD.c中(因此MINOR宏仅在头文件中定义一次),以便排除在声明和实际定义之间的LCD类型冲突的可能性(当它们位于不同的文件中时,这不会被检测为编译错误,也不会出现链接器错误)。 - Grzegorz Szpetkowski
1
我认为,只要一个项目包含XYZ.h和XYZ.c,那么XYZ.c将包含XYZ.h几乎是一条普遍规则和安全的赌注,不是吗? - Mike Nakis
1
是的,你说得对,但最好还是确认一下(例如对于一些正在阅读SO的初学者程序员)。 - Grzegorz Szpetkowski

1

使用多维数组时,除了第一个维度外,其他维度都必须指定。

extern unsigned char LCD[][64];

应该这样做。


0

如果你没有定义二维数组的大小,LCD数组的大小将被拒绝!

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

这取决于你想要什么!


0
在头文件中添加类似以下的声明:
extern unsigned char LCD[8][64];

0

#包含 使用命名空间 std;

主函数(){

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; }


这段代码是做什么的?阅读[答案]并[编辑]您的答案。 - padaleiana

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接