2010-08-31 3 views
1

Je le fichier .cpp principal avec ceci:problèmes externat avec tableau de structures 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]; 

Puis j'ai un form.h ce qui suit:

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

Ce ne compilera pas donner une foule d'erreurs, mais le premier est: 'DataLine *' : unknown size. Devrais-je changer certaines choses à typedef? Je ne suis pas vraiment sûr pourquoi il n'aime pas ça.

+1

Je ne suis pas sûr que 'extern const int MAX_LEN = 4033;' a beaucoup de sens. Si c'est une variable 'extern', vous ne devriez pas lui donner de valeur! –

+0

Ahh oui. J'ai réparé ça. Toujours avoir les mêmes erreurs. –

+0

Le problème principal a été résolu par les réponses données par d'autres. Cependant, j'ai pensé que je devrais souligner que votre fichier d'en-tête est un peu bizarre à d'autres égards. Cela n'a aucun sens d'effectuer des affectations (par exemple 'AllData [index] .StartCode = sc;') dans un en-tête, à moins que vous n'ayez à le faire # inclure directement dans le corps d'une fonction. –

Répondre

2

Vous ne pouvez pas définir

extern struct DataLine AllData[MAX_LEN]; 

dans le fichier d'en-tête parce que struct DataLine est totalement inconnu dans le fichier d'en-tête. No typedef vous aidera ici. La définition de struct DataLine doit être présente dans le fichier d'en-tête avant de définir AllData. Déplacez-le là.

1

Parce que le declaraction de Dataline struct doit être form.h avant la définition de AllData

Fondamentalement, vous dites à vos autres fichiers, ce qu'ils pourraient dire:

DataLine* pre = &AllData[5]; 

Maintenant, comment Le compilateur peut-il savoir où se trouve cet élément à partir du début de AllData, à moins qu'il ne connaisse exactement la taille de chaque DataLine?

Questions connexes