Retourner un const wxString[] !

Résolu
georgeduke Messages postés 167 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 13 avril 2007 - 28 juil. 2005 à 16:20
georgeduke Messages postés 167 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 13 avril 2007 - 31 juil. 2005 à 11:13
Voilà mon problème :



Pour alimenter les différents éléments qu'un wxCombobox devra afficher, j'ai besoin d'indiquer à ce dernier un wxString[].



Pour tester ce menu déroulant, j'ai définit :

const wxString choix[] = {"bonjour" };



puis je charge le menu déroulant :

cb_mods = new wxComboBox(this, ID_MODS,"" ,wxPoint(140,150), wxSize(200, 10),

1, choix, wxCB_READONLY, wxDefaultValidator, "listbox") ;



Et ça fonctionne Le menu s'alimente bien avec la variable choix que je lui donne en paramètres.

Seulement j'aimerais construire un fonction qui me renvoit un wxString
car j'ai pas mal de choses à faire pour alimenter le menu déroulant.



Je pensais que cette fonction pourrait suffire :

const wxString[] choix()

{

wxString liste[] = {"bonjour!"};

return liste;

}

Et je pensais charger simplement le menu déroulant comme ça :

cb_mods = new wxComboBox(this, ID_MODS,"" ,wxPoint(140,150), wxSize(200, 10),

1, choix(), wxCB_READONLY, wxDefaultValidator, "listbox") ;



Mais vous vous en doutez ça ne marche pas !



Je vous serez vraiment reconnaissant pour votre aide !!!

12 réponses

bathof Messages postés 28 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 31 janvier 2009
29 juil. 2005 à 12:52
Salut,



Essai de remplacer



wxString* templiste = new wxString [ strlen(liste) + 1 ];

par

wxString* templiste = new wxString [ (sizeof(wxString) + sizeof(templiste)) ];



et



strcpy( templiste, liste )



par



memcpy( temppiste, liste, sizeof(liste) )



Bonne chance et a +.
3
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 10
28 juil. 2005 à 16:49
et si tu fais tout simplement:

wxString[] choix()
{
wxString liste[] = {"bonjour!"};
return liste;
}
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
georgeduke Messages postés 167 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 13 avril 2007
28 juil. 2005 à 17:59
Non pas mieux ; on dirait que le compilo n'aime pas les crochets après wxString...



122 C:\prog\Devcpp\Dev-Cpp\sources\g3M\main.h expected unqualified-id before '[' token
0
georgeduke Messages postés 167 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 13 avril 2007
28 juil. 2005 à 18:31
Un petit coups de pouce pour arriver enfin à retourner ce wxString[] correctement ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 10
28 juil. 2005 à 20:03
peut etre comme ceci:
wxString* choix()
{
wxString liste[] = {"bonjour!"};
return liste;
}

en remplacent le tableau par un pointeur ?
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
georgeduke Messages postés 167 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 13 avril 2007
28 juil. 2005 à 21:15
Ce n'est toujours par la bonne méthode :-(



Ca me dit qu'il n'arrive pas à convertir un wxstring en wxstring* !



C'est bête de buter là-dessus ; quelqu'un a une idée ? ça doit être courant de genre de méthode...
0
bathof Messages postés 28 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 31 janvier 2009
28 juil. 2005 à 21:27
Salut,



Je connais pas cette librairie, mais je pense que dans cette situation
si tu retournes un pointeur tu auras des problèmes car la variable
"wsString liste" que tu crées dans ta fonction est local pour ta
fonction, donc une fois la fonction executée la variable n'existe plus,
donc je te conseils de la creer dynamiquement comme cela.



Ex, (c++) :



wxString* choix()

{

wxString liste[] = {"Bonjour!"};



wxString* templiste = new char [ strlen(liste) + 1 ];

strcpy( templiste, liste );



return templiste;

}



Attention quand tu récupères ta variable n'oublie pas de l'effacer quand tu ne l'utilises plus.



ex (C++):



int main()

{

wxString* liste = choix();



delete [] liste; // efface ton tableau

return 0;

}
0
bathof Messages postés 28 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 31 janvier 2009
28 juil. 2005 à 21:31
Oups,



une erreur c'est glissé dans mon code c'est pas wxString*
templiste = new char [ strlen(liste) + 1 ]; mais wxString*
templiste = new wxString [ strlen(liste) + 1 ];



Bonne chance et a +.
0
georgeduke Messages postés 167 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 13 avril 2007
28 juil. 2005 à 21:37
Je regarde ça ce soir, merci dans tous les cas de m'avoir répondu !!
Je vous tiens au courant car je penses que ça peut peut-être aider d'autres personnes !
0
georgeduke Messages postés 167 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 13 avril 2007
29 juil. 2005 à 08:01
Ca ne fonctionne toujours pas ! Je vous présente ici les infos du compilo !!


wxString* choix()

{

wxString liste[] = {"Bonjour!"};

wxString* templiste = new wxString [ strlen(liste) + 1 ];
-> cannot convert `wxString*' to `const char*' for argument `1' to
`size_t






strlen(const char*)'



strcpy( templiste, liste ); -> cannot convert `wxString*' to `char*' for argument `1' to `char* strcpy(char*, const char*)'

return templiste;

}

Une idée ?
0
georgeduke Messages postés 167 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 13 avril 2007
29 juil. 2005 à 09:46
Bon ben faute de temps j'abandonne la mise en place de cette fonction,
je vais coder sans ça sera pas propre mais tant pis ; Si vous avez la
solution ça serait bien évidemment génial...

Je ne trouve pas d'info sur wxString, mais si j'ai bien compris la langue de shakespeare elle se comporte comme std::String...

Si ça peut aider...
0
georgeduke Messages postés 167 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 13 avril 2007
31 juil. 2005 à 11:13
Oui ça marche merci !!
0