Exercice 3 Série 7 (structures)

Exercice 3 Série 7 (structures)

by Alessio Verardo -
Number of replies: 3

Bonsoir, je me pose une petite question concernant le fonctionnement des structures. 

En effet, j'étais entrain de faire la dernière partie de l'exercice 3 de la série 7. J'ai donc créé une structure permettant de contenir une description ainsi qu'une fonction:

Déclaration de la structure

Hors à présent, j'aimerais déclarer un pointeur avec une zone mémoire permettant d'avoir 5 éléments de ce type. Pour les initialiser, je voulais procéder de la manière suivante : 

Initialisation d'un pointeur sur la structure

Hors ceci me donne l'erreur suivante à la compilation : 

Compilation error

J'ai alors essayé autrement, en déclarant des variables de type funDesc et en les ajoutant ensuite une à une dans le pointeur : 

new initialisation

Et ceci compile et fonctionne. 

Ma question était donc, quelle est la différence entre les deux versions et pourquoi la première ne compile-t-elle pas ? 

Merci d'avance pour votre aide, 

Alessio 

In reply to Alessio Verardo

Re: Exercice 3 Série 7 (structures)

by Jean-Cédric Chappelier -

Il n'y a aucune différence et là comme ça je ne vois pas d'où vient votre problème ;
d'autant que vous ne montrez pas la 1ère erreur.
Comme c'est un exercice et pas le devoir noté, vous pouvez joindre le code fautif (pièce attachée) à votre message (ou votre réponse à ce message ;-) ).

Tout autre chose (qui n'est donc pas lié à votre question/problème) : pourquoi allouer dynamiquement le tableau choice ? Etes vous dans le « cas numéro 3 » ici ?

In reply to Jean-Cédric Chappelier

Re: Exercice 3 Série 7 (structures)

by Alessio Verardo -

Bonjour, 

Merci pour votre réponse. Effectivement, l'allocation dynamique n'était pas utile ici. Je l'ai donc remplacé par un tableau. Néanmoins, le problème est toujours présent. Cela me donne les erreurs suivantes : 

error

A priori, je dirais que le problème vient du fait qu'il n'arrive pas à convertir {"desc", Fonction} en un élément de type funDesc. Je vous ai joint le code qui ne marche pas et j'ai également commenté une version qui fonctionne. Merci encore pour votre aide.

In reply to Alessio Verardo

Re: Exercice 3 Série 7 (structures)

by Jean-Cédric Chappelier -

(j'aurais du le voir dès le 1er post :-$ ) c'est simplement parce que l’affectation est ambiguë (les accolades peuvent dans le cas de cette affectation signifier plusieurs choses) et doit être déasambiguisée simplement par un cast, genre

choice[0] = (funDesc) { ...

La déclaration initialisation elle n'est pas ambiguë car le contexte impose son interprétation (les affectations en C sont plus ambiguës justement du fait que l'on peut caster ; en C on n'essaye donc pas de deviner le type de l'expression de droite d'une affectation à partir du type de l'expression de gauche :-( )

Un autre détail : assurez vous compiler avec un standard suppérieur ou égal à C99 (sinon la valeur littérale { ... } de struct n'en est pas une)