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 : 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; 
}
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
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 : 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;
}
Le problème vient donc de la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
(*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