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:
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 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&)'
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); ... }
Partager