bonjour à tous,
j'ai déclaré un prototype de classe que j'ai appelé "ACTION" (ligne 6).
dans une liste d'actions, où les cellules contiennent respectivement un pointeur sur un objet action de la classe ACTION puis le champ qui indique la cellule suivante, je voudrais affecter le champ du premier pointeur avec l'instruction new (ligne 35), mais le complilateur indique l'erreur suivante:
dimimatnew.cpp: In constructor `LIEU::LIEU(char*)':
dimimatnew.cpp:35: error: invalid use of undefined type `struct ACTION'
dimimatnew.cpp:6: error: forward declaration of `struct ACTION'
comment faire pour que la cellule créée initialise son champ pointeur d'ACTION?
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 #include <stdlib.h> #include <time.h> #include <iostream.h> #include <string.h> class ACTION; class LIEU; typedef struct cel_lieu{ LIEU *lieu(char *n); struct cel_lieu *suivant; }CEL_LIEU; typedef struct cel_action{ ACTION *action(char *n,int s); struct cel_action *suivant; }CEL_ACTION; class LIEU{ private: char nom[100]; CEL_ACTION *liste_actions; public: LIEU(char *n); }; LIEU::LIEU(char *n){ char element[100]; int element_seuil; CEL_ACTION *A=NULL; strcpy(nom,n); for(cin.getline(element,sizeof(element));strcmp(element,"fin")!=0;A=liste_actions){ liste_actions=(CEL_ACTION*)malloc(sizeof(CEL_ACTION)); cin>>element_seuil; liste_actions->action = new ACTION(element,element_seuil); liste_actions->suivant=A; } } class de{ private: int nbfaces; public: de(int initnbfaces); int lance(int modificateurs); }; de::de(int initnbfaces){ nbfaces=initnbfaces; } int de::lance(int modificateurs){ return ( rand() % nbfaces ) +1 +modificateurs; //cette ligne lance un dé au nombre de faces indiqué par la variable "nbfaces" } class ACTION:public de{ private: char *nom; int seuil; public: ACTION(char *n,int s); bool reussite(int modificateurs); }; ACTION::ACTION(char *n,int s):de(20){ strcpy(nom,n); seuil=s; } bool ACTION::reussite(int modificateurs){ return lance(modificateurs) >= seuil; } main(){}
Partager