Как объявить extern 2d-массив в заголовке? - PullRequest
9 голосов
/ 21 декабря 2011

У нас есть это объявление в 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

Ответы [ 6 ]

17 голосов
/ 21 декабря 2011

Вам необходимо как минимум включить самый правый размер столбца для двумерного массива. Вы можете объявить это так:

extern unsigned char LCD[][64];

В противном случае компилятор не сможет вычислить смещение после первой строки.

2 голосов
/ 21 декабря 2011

Попробуйте указать размеры массива.В C для многомерного массива можно не указывать только одно измерение.

Например:

extern unsigned char LCD[][64];
2 голосов
/ 21 декабря 2011

В C массив не содержит информации о размере каждого из его измерений.Следовательно, компилятор должен знать, насколько велико каждое из измерений, кроме первого.Итак, чтобы исправить эту ситуацию, сделайте что-то вроде этого:

LCD.h:

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

LCD.c:

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

(РЕДАКТИРОВАТЬ: извините, яиспортил вещи в начале, исправил это сейчас.)

1 голос
/ 21 декабря 2011

В многомерных массивах должны быть указаны все размеры, кроме первого. Итак ...

extern unsigned char LCD[][64];

Должен это сделать.

0 голосов
/ 10 ноября 2014

sizeof массива LCD будет отклонен, если вы не определили размер двух измерений!

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

это зависит от того, что вы хотите!

0 голосов
/ 21 декабря 2011

Добавьте в заголовочный файл объявление вроде:

extern unsigned char LCD[8][64];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...