Bonjour a tous,

Voici mon probleme: J'ai une classe abstraite qui s'appelle "Piece", des classes instanciables "Roi", "Pion" et "Cavalier", et un objet "Echiquier" dont un attribut est un vecteur de pointeurs sur Piece (Piece*).

Le probleme, c'est que quand j'essaie d'inserer un "Roi" par adresse dans ce vecteur, le compilateur g++ en perd son latin!? Voici mon code:

Main.cxx
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
 
#include "Position.h"
#include "Roi.h"
#include "Cavalier.h"
#include "Pion.h"
#include "Echiquier.h"
 
int main ()
{
	Position p(15);
	Position q(14);
	p.AffichePosition();
	std::cout<<std::endl<<p<<std::endl;
 
	if (p==q)
	{
		std::cout<<"p = q"<<std::endl;
	}
	else
	{
		std::cout<<"p != q"<<std::endl;
	}
 
	Roi r = Roi("blanc",p);
	Cavalier c = Cavalier("noir",q);
 
	Piece* ad_r = &r;
	Piece* ad_c = &c;	
 
	std::cout<<(*ad_r).toDebug()<<std::endl;
	std::cout<<(*ad_c).toDebug()<<std::endl;
 
	Echiquier E;
	E.ajouter(ad_r);
 
	return 0.;
}
Echiquier.h
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
 
#ifndef ECHIQUIER
#define ECHIQUIER
 
#include <vector>
#include "Piece.h"
 
class Echiquier
{
	private:
		std::vector<Piece*> pieces;
 
	public:
		void ajouter(Piece*);
		void afficher();
 
 
};
 
#endif
Echiquier.cxx
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
 
#include "Echiquier.h"
#include <iostream>
 
void Echiquier::ajouter(Piece* pi)
{
	pieces.insert(pi);
}
 
void Echiquier::afficher()
{
	for (int i=0; i<8; i++)
	{
		for (int j=0; j<8; j++)
		{
			int k=0;
			while (k<pieces.size() && (pieces.at(k).getPosition().getX()!=i || pieces.at(k).getPosition().getY()!=j))
			{
				std::cout<<(pieces.at(k).toDebug());
				k++;
			}
		}
		std::cout<<std::endl;
	}
}
Le compilateur me dit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
Echiquier.cxx: In member function ‘void Echiquier::ajouter(Piece*)’:
Echiquier.cxx:6:19: error: no matching function for call to ‘std::vector<Piece*>::insert(Piece&)’
/usr/include/c++/4.5/bits/vector.tcc:106:5: note: candidates are: std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::insert(std::vector<_Tp, _Alloc>::iterator, const value_type&) [with _Tp = Piece*, _Alloc = std::allocator<Piece*>, std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<Piece**, std::vector<Piece*> >, typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer = Piece**, value_type = Piece*]
/usr/include/c++/4.5/bits/stl_vector.h:858:7: note:                 void std::vector<_Tp, _Alloc>::insert(std::vector<_Tp, _Alloc>::iterator, std::vector::size_type, const value_type&) [with _Tp = Piece*, _Alloc = std::allocator<Piece*>, std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<Piece**, std::vector<Piece*> >, typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer = Piece**, std::vector::size_type = unsigned int, value_type = Piece*]
Echiquier.cxx: In member function ‘void Echiquier::afficher()’:
Echiquier.cxx:16:44: error: request for member ‘getPosition’ in ‘((Echiquier*)this)->Echiquier::pieces.std::vector<_Tp, _Alloc>::at [with _Tp = Piece*, _Alloc = std::allocator<Piece*>, std::vector<_Tp, _Alloc>::reference = Piece*&, std::vector::size_type = unsigned int](((unsigned int)k))’, which is of non-class type ‘Piece*’
Echiquier.cxx:16:84: error: request for member ‘getPosition’ in ‘((Echiquier*)this)->Echiquier::pieces.std::vector<_Tp, _Alloc>::at [with _Tp = Piece*, _Alloc = std::allocator<Piece*>, std::vector<_Tp, _Alloc>::reference = Piece*&, std::vector::size_type = unsigned int](((unsigned int)k))’, which is of non-class type ‘Piece*’
Echiquier.cxx:18:30: error: request for member ‘toDebug’ in ‘((Echiquier*)this)->Echiquier::pieces.std::vector<_Tp, _Alloc>::at [with _Tp = Piece*, _Alloc = std::allocator<Piece*>, std::vector<_Tp, _Alloc>::reference = Piece*&, std::vector::size_type = unsigned int](((unsigned int)k))’, which is of non-class type ‘Piece*’
J'ai pas mal cherche, mais la j'avoue que je suis impuissant...

Merci d'avance.