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 :
En revanche, si je crée une fonction qui modifie directement listest (passage par référence), cela ne marche plus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Quelqu'un saurait-il pourquoi ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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 :
Le problème vient donc de la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }dans la fonction, mais cette ligne fonctionne très bien dans le main(), donc je ne comprends pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part (*listref).push_back(const_cast<char*>(toto.c_str()))
Merci de votre aide,
Andrew
Partager