:pingoin: Bonjour,
Dans une précédente discution on m'a conseiller d'utiliser le couple de fonction remove_if+erase pour faire du nettoyage dans une liste d'objet.
J'ai à peu pres pigé le fonctionnement de tout ça et j'en ai fait une illustration:
Jusque là tout va bien...
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 //Test.cpp #include <iostream> #include <list> #include <algorithm> using namespace std; class Point { int x,y; public: int Getx(){return x;} int Gety(){return y;} Point(int a=0,int b=0):x(a),y(b){} virtual ~Point(){} }; bool Clean(Point& aPoint) { cout <<endl<<"Appel de Clean"; int val; val = aPoint.Getx()-aPoint.Gety(); cout <<endl<<" val: "<<val<<endl; if(!val){cout <<endl<<" val=0, je renvoie true ";return true;} else return false; } void Read(Point aPoint){cout <<"("<< (aPoint.Getx()) << "," << aPoint.Gety()<< ")" <<" ";} int main() { Point Points[5]={Point(1,0),Point(2,1),Point(3,3),Point(4,4),Point(5,7)}; list <Point> Li(Points,Points+5); for_each(Li.begin(),Li.end(),Read);//****Affiche la liste**** cout <<endl; Li.erase(remove_if(Li.begin(),Li.end(),Clean),Li.end()); cout <<endl<<"***"; for_each(Li.begin(),Li.end(),Read); cout <<endl<<"***"<<endl; return 0; }
Mais quand je veux appliquer à mon programme j'obtient:
Compiling...
Logic.cpp
C:\...\EchecEtMat\Logic.cpp(92) : error C2664: 'remove_if' : cannot convert parameter 3 from 'bool (class CPieces &)' to 'bool (__thiscall *)(class CPieces &)'
None of the functions with this name in scope match the target type
Error executing cl.exe.
EchecEtMat.exe - 1 error(s), 0 warning(s)
Je resitue le probleme:
j'ai une fonction Clean Membre d'une classe CLogic:
Que j'utilise au sein d'une autre fonction de CLogic dans la déclaration:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 bool CLogic::Clean(CPieces& aMove) { int FlagPlay=GetFlag(MainFlag,Play);//Obtient le Flag du tour de jeu. if((FlagPlay*m_Plateau[IL1->Getx()][IL1->Gety()])>0) return true; else return false; }Que veut dire
Code : Sélectionner tout - Visualiser dans une fenêtre à part Recipient.erase(remove_if(Recipient.begin(),Recipient.end(),Clean),Recipient.end());__thiscall *)?
Quelles sont les differences significatives entre Test.cpp et mon application
qui empèchent le bon déroulement?
Y-at-il un moyen d'y remedier?
Partager