IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

[Visual C++ Express 2005] Problème conversion System::String ^ et structure


Sujet :

Visual C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [Visual C++ Express 2005] Problème conversion System::String ^ et structure
    Bonjour à vous tous,

    Tout d'abord j'espère que je suis dans la bonne partie du forum sinon je vous présente d'avance mes excuses et vous demanderai de gentiment m'indiquer la bonne .

    Maintenant les faits, je suis actuellement en train de programmer un petit questionnaire simple pour ma boite en C++, pas très compliquer je clique sur un bouton une fonction qui va me chercher une question aléatoire et l'affiche.
    Mais j'ai un gros problème car j'utilise depuis peu l'IDE Visual C++ Express et pour afficher du texte dans un label il faut absolument le type System::String ^ or mon texte est en std::string. J'ai trouvé la solution, utiliser la fontion gcnew String (std::string.c_str()) mais dans mon cas celà ne fonctionne pas et je n'arrive pas à trouver la solution... Maintenant place au code:

    - Ma structure qui me permet de contenir une question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <stdlib.h>
    #include <stdio.h>
    #include <string>
    #include <iostream>
     
    using namespace std;
     
     
    //Début définition
     
    struct structQuestion
    {
    	string  question;
    	string  answer1, answer2, answer3;
    	unsigned short goodAnswer;//Addition des numéros des bonnes réponses ex: réponses 1 et 3 sont justes alors goodAnswer = 3+1 = 4
    	bool questSelected;//Permet de savoir si la question a déjà été séléectionnée
    };
     
    //Fin définition
    Malheureusement je ne peux pas directement utiliser System::String ^ dans ma structure car elle n'est pas "managée" j'avoue que ce terme me dépasse un peu j'ai fait des recherches et j'ai compris que c'était en rapport avec .NET et l'utilisation de certaines fonctions mais je ne comprends pas comment rendre ma structure "managée".

    - Ma classe qui permet de gérer le questionnaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include <time.h> //pour l'utilisation de la fonction rand()
    #include "structQuestion.h"
     
     
    //Début
     
    public class manageQuestionnaire
    {
    	private:
    		structQuestion questionnaire[100];//tableau de question
    		int RANGE_MIN, RANGE_MAX, rand100;//variables indispensables pour la génération d'un nombre aléatoire entre 0 et 99
    		void remplirQuestionnaire (void);//permet de remplir le questionnaire
     
    	public:
    		manageQuestionnaire (void);//constructeur
    		~manageQuestionnaire (void);//destructeur
    		void resetQuestionnaire (void);//remet toutes les questions à l'état non sélectionnée
    		void selectQuestion(structQuestion *question);//sélectionne une question au hasard dans le questionnaire
     
    };
     
    //Fin
    Maintenant la fonction qui peut poser problème à savoir selectQuestion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    void manageQuestionnaire::selectQuestion (structQuestion *question)
    {
     
    	bool selected = false;//permet de savoir si une question a été sélectionnée
     
    	//On ne sort pas de la boucle tant qu'on a pas une question non sélectionnée
    	do
    	{
    		rand100 = (( (double)rand() / (double)RAND_MAX) * RANGE_MAX + RANGE_MIN);//génération nombre aléatoire entre 0 et 99
     
    		//test si la question a déjà été sélectionné
    		if (!questionnaire[rand100].questSelected)
    		{
    			selected = true;
    			questionnaire[rand100].questSelected = true;
    			question->question = questionnaire[rand100].question;
    			question->answer1 = questionnaire[rand100].answer1;
    			question->answer2 = questionnaire[rand100].answer2;
    			question->answer3 = questionnaire[rand100].answer3;
    			question->goodAnswer = questionnaire[rand100].goodAnswer;
    			question->questSelected = questionnaire[rand100].questSelected;
     
    		};
     
    	}while (!selected);
     
    }
    - Extrait du code de la Form où j'ai l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    				 structQuestion oneQuestion;
                                     monQuestionnaire->selectQuestion(&oneQuestion);
    				 string test;
    				 structQuestion testQuestion;
    				 testQuestion.question = "test";
    				 lQuestion->Text = gcnew String (test.c_str());//Fonctionne !!!!
    				 lQuestion->Text = gcnew String (testQuestion.question.c_str());//Fonctionne !!!!
                                     lQuestion->Text = gcnew String (oneQuestion.question.c_str());//NE FONCTIONNE PAS :( et j'ai besoin de faire ça voir erreur en dessous
    - Et enfin voici l'erreur que j'ai:

    1>c:\users\*****\documents\visual studio 2005\projects\questionnaire\questionnaire\FormQuest.h(195) : error C2662: 'std::basic_string<_Elem,_Traits,_Ax>::c_str' : impossible de convertir un pointeur 'this' de 'std::string' en 'const std::basic_string<_Elem,_Traits,_Ax> &'
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>,
    1> _Ax=std::allocator<char>
    1> ]
    1> Un objet de tas gc (un pointeur gc déréférencé) ne peut pas être converti en une référence native
    Voila en espérant que quelqu'un puisse m'aider et que j'ai été assez clair.

    Cordialement,

    Otacon06

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Pourquoi passes-tu un pointeur const à SelectQuestion(), alors qu'elle est supposée modifier l'objet?

    PS: Tu devrais utiliser un tableau de trois strings plutôt que answer1, answer2, answer3...

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Salut,

    Tout d'abord merci de ta réponse.

    Pour le "const" excuse moi c'était une bidouille de ma part après avoir visiter un ou deux forums mais ça ne change rien à l'erreur j'ai maintenant éditer le message .
    Pour le tableau de string tu crois vraiment que ça va changer qqch??? Bon je peux tenter je te tiens au courant.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ouai ben toujours la même erreur...
    C'est vraiment bizarre car quand je déclare un objet structQuestion en local et que je le modifie en local pas de problème mais dès que je le passe en paramètre de ma fonction à ce moment là plus moyen d'utiliser la fonction c_str().
    J'ai vérifié en mettant en commentaire toutes les lignes où il y avait une erreur et j'ai lancé le programme en pas à pas et la structure que je passe en paramètre de la fonction selectQuestion se remplie bien donc bon je suis un perdu là...

Discussions similaires

  1. Problème d'installation de Visual C++ Express 2005
    Par Invité dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 11/06/2010, 11h47
  2. Visual C++ Express 2005 : problème
    Par Myth_Titans dans le forum MFC
    Réponses: 17
    Dernier message: 14/06/2006, 19h40
  3. configurer le sdk directx avec visual c# express 2005
    Par khodi03 dans le forum DirectX
    Réponses: 1
    Dernier message: 22/01/2006, 11h17
  4. [Visual Basic Express 2005]Aide de vb
    Par robert.michel9 dans le forum EDI/Outils
    Réponses: 1
    Dernier message: 21/12/2005, 18h53
  5. [C#] Conversion System.String en System.Drawing.Color
    Par Silex dans le forum Windows Forms
    Réponses: 6
    Dernier message: 27/04/2005, 08h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo