#1 Le 25/03/2008, à 04:37
- Splotch
has initializer but incomplete type
Bonjour, voila,j'essaye pour la première fois l'utilisation des unions. Et je tombe sur un magnifique bug dont je ne trouve pas a solution :
test-exp.c: In function «main":
test-exp.c:9: erreur: variable «x" has initializer but incomplete type
test-exp.c:9: erreur: invalid application of «sizeof" to incomplete type «expression"
test-exp.c:9: erreur: storage size of «x" isn"t known
Je vous présente donc mes 3 fichier responsable de l'erreur, j'ai un fichier main et les fichier expression.h et expression.c
#include <stdlib.h>
#include "expression.h"
int main(int argc,char **argv){
expression x = malloc(sizeof(expression));
}
#ifndef EXPRESSION_H
#define EXPRESSION_H
/*
expression est :
- soit une valeur entiere
- soit un noeud ayant :
-- pour sommet un operateur
-- et pour membre gauche et droite :
--- soit une valeur entiere
--- soit une expression
*/
typedef union expression expression;
/*
Les opérateurs sont
egal, diff, sup, inf, supegal, infegal
affect, plus, moins, fois, divise
*/
typedef enum operateur operateur;
#endif /* EXPRESSION_H */
#include "expression.h"
enum operateur {
egal, diff, sup, inf, supegal, infegal,
affect, plus, moins, fois, divise
};
typedef struct {
operateur sommet;
expression *gauche;
expression *droite;
} noeud;
union expression {
int int_val;
noeud noeud_val;
};
Si quelqu'un à la solution à mon problème, merci d'avance.
Hors ligne
#2 Le 25/03/2008, à 11:10
- telliam
Re : has initializer but incomplete type
la syntaxe de :
typedef union expression expression
est incorrect.
"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard
Hors ligne
#3 Le 25/03/2008, à 14:16
- Splotch
Re : has initializer but incomplete type
"- Un intellectuel assis va moins loin qu'un con qui marche."
ok mais jtrouve pas tjrs pas la solution. A mon avis je vais aller très loin .
Dernière modification par Splotch (Le 25/03/2008, à 14:16)
Hors ligne
#4 Le 25/03/2008, à 14:21
- Splotch
Re : has initializer but incomplete type
j'atout traffiquer pour ne pas avoir de truc moche : typedef union expression expression
typedef struct noeud {
operateur sommet;
expression *gauche;
expression *droite;
} noeud;
struct expression {
int type; // 1 pour entier, 2 pour noeud.
union {
noeud noeud_val;
int int_val;
} data;
};
typedef struct expression expression;
Ben j'ai la même erreur, la je vais acheter un bouquin sur le C qui traite des union je crois.
Dernière modification par Splotch (Le 25/03/2008, à 14:22)
Hors ligne
#5 Le 25/03/2008, à 16:03
- Link31
Re : has initializer but incomplete type
expression.h
#ifndef EXPRESSION_H
#define EXPRESSION_H
typedef union expression expression_;
typedef struct noeud noeud_;
typedef enum {
egal, diff, sup, inf, supegal, infegal,
affect, plus, moins, fois, divise
} operateur;
typedef struct {
operateur sommet;
expression_ *gauche;
expression_ *droite;
} noeud;
typedef union {
int int_val;
noeud noeud_val;
} expression;
#endif /* EXPRESSION_H */
expression.c
[inutile]
main.c
#include <stdlib.h>
#include "expression.h"
int main(int argc,char **argv){
expression *x = malloc(sizeof(expression));
}
Hors ligne