Retourner un const wxString[] !

[Résolu]
Signaler
Messages postés
167
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
13 avril 2007
-
Messages postés
167
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
13 avril 2007
-
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 !!!
A voir également:

12 réponses

Messages postés
28
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
31 janvier 2009

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 +.
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
et si tu fais tout simplement:

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

"La chance accorde ses faveur aux esprits avertis..."
Messages postés
167
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
13 avril 2007

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
Messages postés
167
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
13 avril 2007

Un petit coups de pouce pour arriver enfin à retourner ce wxString[] correctement ?
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
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..."
Messages postés
167
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
13 avril 2007

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...
Messages postés
28
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
31 janvier 2009

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;

}
Messages postés
28
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
31 janvier 2009

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 +.
Messages postés
167
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
13 avril 2007

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 !
Messages postés
167
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
13 avril 2007

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 ?
Messages postés
167
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
13 avril 2007

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...
Messages postés
167
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
13 avril 2007

Oui ça marche merci !!