2011-12-20 8 views

ответ

15

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

extern unsigned char LCD[][64]; 

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

0

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

extern unsigned char LCD[8][64]; 
2

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

lcd.h:

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

lcd.c:

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

(EDIT: жаль, что я испортил вещи в начале , зафиксировал его сейчас.)

+0

Может быть полезно подчеркнуть «#include» LCD.h «' в 'LCD.c' (так что макрос MINOR определяется только один раз в файле заголовка), чтобы исключить возможность возникновения конфликтующих типов для' LCD' между декларация и фактическое определение (которое не обнаруживается как ошибка компиляции, когда они находятся в разных файлах и ошибка компоновщика). –

+1

Я думал, что всякий раз, когда проект содержит как XYZ.h, так и XYZ.c, это довольно универсальное правило и безопасная ставка, что XYZ.c будет включать XYZ.h, нет? –

+1

Да, вы правы, но как всегда лучше его подтвердить (например, для некоторых начинающих программистов, которые читают SO). –

1

С многомерными массивами необходимо указать все, кроме первого измерения. Так ...

extern unsigned char LCD[][64]; 

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

2

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

Как это:

extern unsigned char LCD[][64]; 
0

SizeOf ЖК-массива будет отказано, если вы не определили размер двухмерного!

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

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