2010-08-31 5 views
1

У меня есть главный файл .cpp с этим:ехЬегп проблемы с массивом структур C++

#include "stdafx.h" 
#include "Form1.h" 
#include <iostream> 
... 
#include <stdio.h> 

const int MAX_LEN = 1000; 

struct DataLine { 
    char StartCode; 
    int ByteCount; 
    int Address; 
    int RecType; 
    int DBytes[16]; 
    int Checksum; 
}; 
DataLine AllData[MAX_LEN]; 

Тогда у меня есть form.h со следующим:

extern const int MAX_LEN; 
extern struct DataLine AllData[MAX_LEN]; 
//later on in header file 
AllData[index].Startcode = sc; 
AllData[index].ByteCount = i_Byte_Count; 
... 

Это не будет компилировать давать множество ошибок, но первое: 'DataLine *' : unknown size. Должен ли я изменить некоторые вещи на typedef? Я не совсем уверен, почему это не нравится.

+1

Я не уверен, что 'extern const int MAX_LEN = 4033;' имеет большой смысл. Если это переменная 'extern', вы не должны придавать ей значение! –

+0

Ах, да. Я это исправил. Все те же ошибки. –

+0

Основная проблема была решена в ответах других. Тем не менее, я думал, что должен указать, что ваш заголовочный файл немного странный по-другому. Не имеет смысла выполнять присвоения (например, 'AllData [index] .StartCode = sc;') в заголовке, если вы не являетесь '# include' -в его непосредственно в тело функции. –

ответ

2

Вы не можете определить

extern struct DataLine AllData[MAX_LEN]; 

в заголовочном файле, потому что struct DataLine совершенно неизвестен в заголовочном файле. Нет typedef поможет вам здесь. Определение struct DataLine должно присутствовать в файле заголовка, прежде чем вы определяете AllData. Переместите его туда.

1

Поскольку declaraction из STRUCT DataLine должен быть form.h перед определением AllData

В принципе, вы говорите на другие файлы, которые они могли бы сказать:

DataLine* pre = &AllData[5]; 

Теперь, как мог ли компилятор узнать, где далеко от начала AllData этот элемент, если он точно не знает, насколько велика каждая DataLine?

Смежные вопросы