2015-11-13 1 views
0

J'ai une fonction où j'ai les lignes dans scope.c, et échoue sur la troisième ligne avec une erreur de type pointeur incompatible.Affectation d'un type de pointeur incompatible avec structs

struct scope* newScope = malloc(sizeof(struct scope)); 
newScope->symbols = createSymbolTable(); 
newScope->st = createSyntaxTree(); 

Le champ struct dans scope.h est défini comme:

struct scope { 
    char *id; 
    struct symboltable* symbols; 
    struct symboltree* st; 
    struct symboltable* strings; 
}; 

Et le prototype de la fonction createSyntaxTree() dans syntax.h est

struct syntaxtree* createSyntaxTree(); 

Je pourrais comprendre avoir des problèmes si je traitant de typedefs, mais ceci est assez straightfoward, et les types des deux côtés sont de type syntaxtree*.

Comment résoudre cette erreur frustrante?

Répondre

1

le type de scope::st est struct symboltree*. Le type de retour de createSyntaxTree() est struct syntaxtree*. Ils sont différents types. Par conséquent,

newScope->st = createSyntaxTree(); 

est un problème.

Peut-être que vous vouliez utiliser:

struct syntaxtree* st; 

au lieu de

struct symboltree* st; 

lors de la définition struct scope.

+0

Seigneur tout-puissant ... tu as raison. Merci d'avoir signalé l'erreur et pour la réponse rapide. Évidemment, je suis réveillé depuis trop longtemps. –