Bonjour a tous,

voilà, dans mon programme, j'utilise différentes classes templates et j'aimerai effectuer un retour de type covariant sur elle. Seulement, mon compilateur (gcc4.1) me renvoit ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
 tinyConnection.h:73: error: invalid covariant return type for 
'virtual libterp::tinyXmlRpcCall<std::vector<libterp::dict, std::allocator<libterp::dict> >&> 
libterp::tinyXmlRpcConnection::read(const std::string&, const std::vector<int, std::allocator<int> >&, 
const std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, 
std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, const libterp::dict&)'
tinyConnection.h:50: error:   overriding 
'virtual libterp::tinyCall<std::vector<libterp::dict, std::allocator<libterp::dict> >&> 
libterp::tinyConnection::read(const std::string&, const std::vector<int, std::allocator<int> >&
, const std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, 
std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, const libterp::dict&)'
Mon code source est le suivant:

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
//Mes classes templates qui servent de retour
template <class T>
class tinyCall
{
	public:
		virtual ~tinyCall(){};
		virtual T getResult();
};
template <class T>
class tinyXmlRpcCall : public tinyCall<T>
{
	public:
		tinyXmlRpcCall(xmlrpc_c::rpcPtr call, xmlrpc_c::connection& connection);
		T getResult();
};
 
 
/Ma classe de base, renvoie le type de base
class tinyConnection
{
	public: 
		virtual tinyCall<vector<dict>&> read(const string& object, const vector<int>& ids, 
									   const vector<string>& fields, const dict& context) = 0;
...
}
 
//Ma classe déricée, renvoie le type dérivé
class tinyXmlRpcConnection : public tinyConnection
{
	public:
		tinyXmlRpcCall<vector<dict>&> read(const string& object, const vector<int>& ids, 
										   const vector<string>& fields, const dict& context);
...
}