Passage par référence pour modifier une liste de string
Bonjour,
Je souhaite créer une liste de chaînes de caractères de type vector<char*> en C++ qui puisse accepter de nouvelles chaînes issues d'une variable de type string grâce à une fonction. J'ai fait un code sans fonction qui marche très bien :
Code:
1 2 3 4 5 6 7 8
|
void main()
{
vector<char*> listest(0);
string toto = "Hello";
listest.push_back(const_cast<char*>(toto.c_str())); // J'ai dû rajouter const_cast<char*> pour passer en type char* car la méthode push_back n'acceptait pas toto.c_str() qui est de type const char*.
cout << listest[0] << endl;
} |
En revanche, si je crée une fonction qui modifie directement listest (passage par référence), cela ne marche plus :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
void fct_test(vector<char*> *listref)
{
string toto = "Hello";
(*listref).push_back(const_cast<char*>(toto.c_str()));
}
void main()
{
vector<char*> listest(0);
fct_test(&listest);
cout << listest[0] << endl;
} |
Quelqu'un saurait-il pourquoi ?
Je me suis demandé si cela pouvait venir du passage par référence dans la fonction, mais si je fais le test suivant, cela fonctionne très bien :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
void fct_test(vector<char*> *listref)
{
(*listref).push_back("Hello");
}
void main()
{
vector<char*> listest(0);
fct_test(&listest);
cout << listest[0] << endl;
} |
Le problème vient donc de la ligne
Code:
(*listref).push_back(const_cast<char*>(toto.c_str()))
dans la fonction, mais cette ligne fonctionne très bien dans le main(), donc je ne comprends pas.
Merci de votre aide,
Andrew