: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:
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;
}
Jusque là tout va bien...
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:
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 j'utilise au sein d'une autre fonction de CLogic dans la déclaration:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Recipient.erase(remove_if(Recipient.begin(),Recipient.end(),Clean),Recipient.end());
Que veut dire __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?