Penser en C++ chapitre 14 exercice 9
Salut à tous,
Je réapprends à programmer en C++ en lisant Penser en C++ et je bloque sur l’exercice 9 du chapitre 14 :
Citation:
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*?
Ce qui me pose problème c'est la redéfinition de operator[]:cry: ( 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*:oops:
Voici mon code :
Code:
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");
} |
et l'erreur de compilation ligne 15 :
Citation:
error C2440: 'return'*: impossible de convertir de 'std::string *' en 'std::string *&'