C erreur: type de tableau est incomplet type d'élément
Je suis en train de compiler un programme sous Ubuntu 11.04 qui fonctionne bien sous Windows mais il donne l'erreur ci-dessus. J'ai ajouté un commentaire à la ligne qui est à l'origine de l'erreur. Voici le code:
route_input() {
int num_routes;//Variable to act as the loop counter for the loop getting route details
int x;
char route_id[3];
char r_source[20];
char r_destination[20];
int r_buses;
printf("Please enter the number of routes used: \n");
scanf("%d", &num_routes);
char routes_arr[num_routes][10];//An array to hold the details of each route
printf("\nNumber of routes is %d\n", num_routes);
struct route r[num_routes];//An array of structures of type route (This line causes the error)
fflush(stdin);
for (x = num_routes; x > 0; x--) {
printf("\nEnter the route number: ");
scanf("%s", r[x].route_num);
printf("Route number is %s", r[x].route_num);
printf("\nEnter the route source: ");
fflush(stdin);
scanf("%s", r[x].source);
printf("Source = %s", r[x].source);
printf("\nEnter the route destination: ");
fflush(stdin);
gets(r[x].destination);
printf("Destination = %s", r[x].destination);
printf("\nEnter the number of buses that use this route: ");
scanf("%d", &r[x].num_of_buses);
printf("Number of buses = %d", r[x].num_of_buses);
}
for (x = num_routes; x > 0; x--) {
printf("\n\n+++Routes' Details+++\nRoute number = %s, Source = %s, Destination = %s, Number of buses for this route = %d\n", r[x].route_num, r[x].source, r[x].destination, r[x].num_of_buses);
}
}
Ne pas
double possible de stackoverflow.com/questions/2274550/...
Qu'est-ce que
@Deebee souligné, si votre
fflush(stdin)
, c'est un comportement indéfini.double possible de stackoverflow.com/questions/2274550/...
Qu'est-ce que
struct route
, où est-il défini?@Deebee souligné, si votre
struct route
est une structure de données récursive avec les non-pointeur auto-référentielle de membres, vous êtes susceptible de frapper le incomplète type de problème.fflush(stdout)
à la place si vous voulez vous assurer que les messages ne se termine pas dans de nouvelles lignes apparaissent.OriginalL'auteur diamondtrust66 | 2012-05-01
Vous devez vous connecter pour publier un commentaire.
Le message d'erreur est dû au fait que vous avez une déclaration incomplète de
struct route
. c'est à dire quelque part que vous avez une ligne qui ditsans spécification de ce qui est de la struct. C'est parfaitement légal et permet au compilateur de savoir la structure existe avant qu'il sait ce qu'il est. Qui permet de définir des pointeurs vers des objets de type
struct route
pour opaque types et pour sa déclaration.Cependant, le compilateur ne peut pas utiliser un type incomplète comme les éléments d'un tableau car il a besoin de savoir la taille de la structure (struct) pour calculer la quantité de mémoire nécessaire pour le tableau et calculer les décalages à partir des index.
Je dirais que vous avez oublié d'inclure l'en-tête qui définit votre itinéraire struct. Aussi, il est possible que Ubuntu est opaque type appelé
struct route
dans sa bibliothèque, déjà, de sorte que vous pourriez avoir à changer le nom de votre structure (struct) pour éviter un affrontement.OriginalL'auteur JeremyP
Vous devez inclure le fichier d'en-tête qui définit
struct route
.Je ne suis pas sûr d'en-tête de tout cela, et il peut varier entre Linux et Windows.
Dans Linux,
net/route.h
définitstruct rtentry
, qui est peut-être ce dont vous avez besoin.OriginalL'auteur ugoren
Pour autant que je sais C (au moins GCC ne va pas) ne vous permet pas d'avoir des variables comme les indices de tableau, c'est pourquoi il s'agit de produire cette erreur. Essayez une constante à la place.
Il n'est pas le cas avec les multiples dimensions des tableaux parce que la ligne n'est pas complusary en multi dim tableaux, mais dans le cas d'une seule dim tableaux d'index de tableau doit être une variable.
Certains compilateurs permettent de tels comportements c'est pourquoi il n'est pas de produire une erreur dans windows.
char routes_arr[num_routes][10]
serait aussi un échec. Donc, il est probablement à l'aide d'un compilateur c99.comme je l'ai dit multidim tableaux de ligne variable est facultative et pour autant que je sais ubuntu11.04 GCC ne donner que de l'erreur, il n'est pas basé sur C99
Mon point est qu'il est de toute évidence à l'aide d'un compilateur qui prend en charge une variable de dimension (ou le
routes_arr
échouerait). Si son problème dans la définition der
ne peut pas être ce que vous dites.Mais 2D tableaux n'ont pas besoin d'une ligne compulsarily c'est pourquoi il n'est pas à défaut de là...d'ailleurs itinéraire peut être juste tout de la structure qu'il a été défini précédemment il ne marche pas vraiment besoin d'un fichier d'en-tête
j'ai testé il vérifier urself
OriginalL'auteur Kartik Anand