Salut à tous,
Je réapprends à programmer en C++ en lisant Penser en C++ et je bloque sur l’exercice 9 du chapitre 14 :Ce qui me pose problème c'est la redéfinition de operator[]Héritez une classe StringVectorde vector<void*>et redéfinissez les fonctions membres push_back( )et operator[]pour accepter et produire des string*. Qu'est-ce qui arrive si vous essayez de push_back( )un void*?( Rien ne vous empêche de donner aussi vôtre avis sur le redéfinition de push_back, si nécessaire ): Je n'arrives pas à comprendre comment renvoyer une référence sur un std::string*
Voici mon code :et l'erreur de compilation ligne 15 :
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
40 #include <vector> #include <iostream> class StringVector : public std::vector<void*> { public: void push_back ( std::string* s ); std::string*& operator [] ( size_type n ); }; void StringVector::push_back ( std::string* spt ) { std::vector<void*>::push_back ( static_cast<void*>(spt) ); } std::string*& StringVector::operator [] ( size_type n ) { return (static_cast<std::string*>(this->vector<void*>::operator [] ( n ))); } void main () { StringVector sv; //Test de push_back std::string* spt = new std::string ( "abc" ); sv.push_back ( spt ); spt = new std::string ( "def" ); sv.push_back ( spt ); spt = new std::string ( "ghi" ); sv.push_back ( spt ); std::cout << "iterator :" << std::endl; for ( StringVector::iterator it = sv.begin(); it != sv.end(); ++it ) std::cout << (static_cast<std::string*>(*it))->data() << std::endl; //Test de operator [] std::cout << "operator [] :" << std::endl; for ( unsigned int i = 0; i < sv.size(); ++i ) { std::cout << i << " = " << sv[i] << std::endl; } system ("pause"); }error C2440: 'return'*: impossible de convertir de 'std::string *' en 'std::string *&'
Partager