Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

telliam a écrit :

"- 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 tongue.

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