Bonjour.
Je rencontre un problème du genre impossible d'évaluer l'expression.
Je pensais q'il pouvait s'agir d'un problème d'initialisation.
Mais là, je ne vois vraiment pas d'où ça peut venir.
Je pense aussi que cela peut provenir de mes structures qui s'entrelassent...
mais comme ça passe à la compilation...
Bref, je ne vois vraiment pas...
Je me permet donc de vous envoyer un bout de code, immédiatement compilable, qui génère cette erreur.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
 
 
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
 
 
////////////////////////////////////////definition des types
 
typedef struct s_test
{
	char *valeur_test;
	struct s_instruction *then_branch;
	struct s_instruction *else_branch;
}test;
 
 
typedef struct s_instruction
{
	int numero; //le compteur du nombre d'instruction, car j'utilise les tableaux dynamiques
	int cle;
	int arite;
	union
	{
		char *instruction_simple;
		char *instruction_primitive;
		test instruction_test;
	}val;
}instruction;
 
typedef instruction *p_instruction;
 
 
typedef struct s_instance
{
	int numero_instance;
	int date_reveil;
	int numero_tache;
	instruction *p_instruction;
}instance;
 
typedef instance *p_instance;
 
////////////////////////////////////////definition des spécifications
 
//construit une instruction simple
instruction construit_instruction_simple(char*);
 
//initialise une instance
instance initialise_instance(int, int, int);
 
//ajouter une instruction à une instance
instance ajoute_instruction_instance(instruction, instance);
 
//affiche une instance
void affiche_instance(instance);
 
//affiche une instruction
void affiche_instruction(instruction);
 
//affiche un test
void affiche_test(test);
 
//affiche la then branch
void affiche_then_branch(p_instruction);
 
//affiche la else branch
void affiche_else_branch(p_instruction);
 
 
////////////////////////////////////////implémentation des spécifications
 
//construit une instruction simple
instruction construit_instruction_simple(char *ins)
{
	instruction instruc;
	instruc.arite = 1;
	instruc.cle = 0;
	instruc.numero = 0;
	instruc.val.instruction_simple = ins;
	return instruc;
}
 
//initialise une instance
instance initialise_instance(int numero_instance, int date_reveil, int numero_tache)
{
	instance inst; /* = (instance)malloc(sizeof(instance));*/
	inst.numero_instance = numero_instance;
	inst.date_reveil = date_reveil;
	inst.numero_tache = numero_tache;
	inst.p_instruction = NULL;
	return inst;
}
 
//ajouter une instruction à une instance
instance ajoute_instruction_instance(instruction ins, instance instan)
{
	p_instruction p = (p_instruction)realloc(instan.p_instruction, (instan.p_instruction->numero +1)*sizeof(instruction));
	if(p == NULL)
	{
		printf(" \n ajout d'une nouvelle instruction a une instance impossible \n");
	}
	else
	{
		p[p->numero] = ins;
		p->numero++;
		instan.p_instruction = p;
	}
	return instan;
}
 
//affiche une instance
void affiche_instance(instance instan)
{
	int i;
	for(i=0; i<instan.p_instruction->numero; i++)
	{
		affiche_instruction(instan.p_instruction[i]);
	}
}
 
//affiche une instruction
void affiche_instruction(instruction instruc)
{
	if(instruc.arite == 1)
	{
		printf(instruc.val.instruction_simple);
	}
	else if(instruc.arite == 2)
	{
		printf(instruc.val.instruction_primitive);
	}
	else if(instruc.arite == 3)
	{
		affiche_test(instruc.val.instruction_test);
	}
}
 
//affiche un test
void affiche_test(test t)
{
	printf(t.valeur_test);
	printf("(");
	affiche_then_branch(t.then_branch);
	printf(",");
	affiche_else_branch(t.else_branch);
	printf(")");
}
 
//affiche la then branch
void affiche_then_branch(p_instruction p)
{
	int i;
	for(i=0; i<p->numero; i++)
	{
		affiche_instruction(p[i]);
	}
}
 
//affiche la else branch
void affiche_else_branch(p_instruction p)
{
	int i;
	for(i=0; i<p->numero; i++)
	{
		affiche_instruction(p[i]);
	}
}
 
///////////////////////////////////////fonction principale
 
int main()
{
	instance instance1 = initialise_instance(1, 0, 1);
	instance instance2 = initialise_instance(2, 0, 2);
 
	instruction instruction1 = construit_instruction_simple("a1");
	instruction instruction2 = construit_instruction_simple("a2");
 
	instance1 = ajoute_instruction_instance(instruction1, instance1);
	instance1 = ajoute_instruction_instance(instruction1, instance1);
 
	instance2 = ajoute_instruction_instance(instruction2, instance2);
	instance2 = ajoute_instruction_instance(instruction2, instance2);
	instance2 = ajoute_instruction_instance(instruction2, instance2);
 
	affiche_instance(instance1);
	printf("\n");
	affiche_instance(instance2);
	printf("\n");
 
	return 0;
}
j'envoie une copie d'écran des erreurs générées os visual C++ au cas où...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
 
-		ins	{numero=0 cle=0 arite=1 ...}	s_instruction
		numero	0	int
		cle	0	int
		arite	1	int
-		val	{instruction_simple=0x011b67a0 "a1" instruction_primitive=0x011b67a0 "a1" instruction_test={...} }	s_instruction::<unnamed-type-val>
-		instruction_simple	0x011b67a0 "a1"	char *
			97 'a'	char
-		instruction_primitive	0x011b67a0 "a1"	char *
			97 'a'	char
-		instruction_test	{valeur_test=0x011b67a0 "a1" then_branch=0xcccccccc else_branch=0xcccccccc }	s_test
-		valeur_test	0x011b67a0 "a1"	char *
			97 'a'	char
-		then_branch	0xcccccccc {numero=??? cle=??? arite=??? ...}	s_instruction *
		numero	CXX0030: Erreur*: impossible d'évaluer l'expression	
		cle	CXX0030: Erreur*: impossible d'évaluer l'expression	
		arite	CXX0030: Erreur*: impossible d'évaluer l'expression	
+		val	{instruction_simple=??? instruction_primitive=??? instruction_test={...} }	s_instruction::<unnamed-type-val>
-		else_branch	0xcccccccc {numero=??? cle=??? arite=??? ...}	s_instruction *
		numero	CXX0030: Erreur*: impossible d'évaluer l'expression	
		cle	CXX0030: Erreur*: impossible d'évaluer l'expression	
		arite	CXX0030: Erreur*: impossible d'évaluer l'expression	
+		val	{instruction_simple=??? instruction_primitive=??? instruction_test={...} }	s_instruction::<unnamed-type-val>
-		instan	{numero_instance=1 date_reveil=0 numero_tache=1 ...}	s_instance
		numero_instance	1	int
		date_reveil	0	int
		numero_tache	1	int
-		p_instruction	0x00000000 {numero=??? cle=??? arite=??? ...}	s_instruction *
		numero	CXX0030: Erreur*: impossible d'évaluer l'expression	
		cle	CXX0030: Erreur*: impossible d'évaluer l'expression	
		arite	CXX0030: Erreur*: impossible d'évaluer l'expression	
-		val	{instruction_simple=??? instruction_primitive=??? instruction_test={...} }	s_instruction::<unnamed-type-val>
		instruction_simple	CXX0030: Erreur*: impossible d'évaluer l'expression	
		instruction_primitive	CXX0030: Erreur*: impossible d'évaluer l'expression	
-		instruction_test	{valeur_test=??? then_branch=??? else_branch=??? }	s_test
		valeur_test	CXX0030: Erreur*: impossible d'évaluer l'expression	
		then_branch	CXX0030: Erreur*: impossible d'évaluer l'expression	
		else_branch	CXX0030: Erreur*: impossible d'évaluer l'expression	
-		p	0xcccccccc {numero=??? cle=??? arite=??? ...}	s_instruction *
		numero	CXX0030: Erreur*: impossible d'évaluer l'expression	
		cle	CXX0030: Erreur*: impossible d'évaluer l'expression	
		arite	CXX0030: Erreur*: impossible d'évaluer l'expression	
-		val	{instruction_simple=??? instruction_primitive=??? instruction_test={...} }	s_instruction::<unnamed-type-val>
		instruction_simple	CXX0030: Erreur*: impossible d'évaluer l'expression	
		instruction_primitive	CXX0030: Erreur*: impossible d'évaluer l'expression	
-		instruction_test	{valeur_test=??? then_branch=??? else_branch=??? }	s_test
		valeur_test	CXX0030: Erreur*: impossible d'évaluer l'expression	
		then_branch	CXX0030: Erreur*: impossible d'évaluer l'expression	
		else_branch	CXX0030: Erreur*: impossible d'évaluer l'expression
En espérant que vous pourriez m'aider..