Bonjour,
J'utilse 3 classes dans un programme de la manière suivante :
la class Task:
Elle possède un pointeur sur PreviousManager
La classe PreviousManager qui est une liste de pointeurs sur Previous:
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 class Task : public ProcessObject { protected: bool m_bIsExecuted; bool m_bResult; bool m_bLaunch; bool m_bIsLaunched; PreviousManager* m_pPrevious; public: Task(); ~Task(); // bool execute(){return true;}; // bool check() {return true;}; bool check(){return true;}; bool execute(){return true;}; bool getIsExecuted(); bool getResult(); bool getLaunch(); bool getIsLaunched(); };
et enfin la classe Previous:
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 #ifndef PREVIOUSMANAGER_H_ #define PREVIOUSMANAGER_H_ class PreviousManager { private: vector<Previous*> m_lstListPrev; public: PreviousManager(); virtual ~PreviousManager(); bool addPrev( Task* T, bool iscrit, bool cond) ; bool removePrev(Previous* p); bool checkCond(Previous * P); }; #endif /*PREVIOUSMANAGER_H_*/
ensuite pour les includes:
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 class Task; class Previous { private: Task* m_pT; bool m_bIsCriteria; bool m_bCond; public: Previous(); Previous (Task *T,bool iscrit, bool cond); ~Previous(); bool getIsCriteria(); bool getCond(); void setIsCriteria(bool b); void setCond(bool b); Task* getTask(); };
dans Task.cpp:
#include "Previous.h"
#include "PreviousManager.h"
#include "Task.h"
dans PreviousManager.cpp:
#include "Previous.h"
#include "PreviousManager.h"
et dans Previous.cpp:
#include "Previous.h"
Alors j'ai été obligé de rajouter la ligne "class Task;" dans la classe Previous car sinon j'avais une boucle sur les includes. En effet un Task possède un PreviousManager qui est une liste de Previous qui eux même sont des Tasks particulières (j'espère que ca vous paraît clair )
Mon problème est dans la fonctionLa ligne en rouge me donne une erreur du type:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 bool PreviousManager::checkCond(Previous* P) { // si le Previous na pas de condition alors on retourne true if (!(P->getIsCriteria())) return true; if ((P->getCond())==((P->getTask())->getResult())) return true; else return false; }
Severity and Description
error: forward declaration of `struct Task' DIS Previous.h line 4
error: invalid use of undefined type `struct Task' DIS PreviousManager.cpp line 58
Je pense que la classe Previous n'a pas pris en compte le fait que la ligne "class Task" signifiait que la classe Task existe mais est définié ailleurs. Elle la voit comme une struct.
Je sais pas si j'ai été assez clair, j'espère que certains d'entre vous sauront m'aidé.
Merci d'avance.
Partager