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

Problème conversion System::String ^ et structure [Visual C++] - C++ - Programmation

Marsh Posté le 01-07-2009 à 10:46:05    

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 :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string>
  4. #include <iostream>
  5. using namespace std;
  6. //Début définition
  7. struct structQuestion
  8. {
  9. string  question;
  10. string  answer1, answer2, answer3;
  11. unsigned short goodAnswer;//Addition des numéros des bonnes réponses ex: réponses 1 et 3 sont justes alors goodAnswer = 3+1 = 4
  12. bool questSelected;//Permet de savoir si la question a déjà été séléectionnée
  13. };
  14. //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 :
  1. #include <time.h> //pour l'utilisation de la fonction rand()
  2. #include "structQuestion.h"
  3. //Début
  4. public class manageQuestionnaire
  5. {
  6. private:
  7.  structQuestion questionnaire[100];//tableau de question
  8.  int RANGE_MIN, RANGE_MAX, rand100;//variables indispensables pour la génération d'un nombre aléatoire entre 0 et 99
  9.  void remplirQuestionnaire (void);//permet de remplir le questionnaire
  10. public:
  11.  manageQuestionnaire (void);//constructeur
  12.  ~manageQuestionnaire (void);//destructeur
  13.  void resetQuestionnaire (void);//remet toutes les questions à l'état non sélectionnée
  14.  void selectQuestion(structQuestion *question);//sélectionne une question au hasard dans le questionnaire
  15. };
  16. //Fin


 
Maintenant la fonction qui peut poser problème à savoir selectQuestion:
 

Code :
  1. void manageQuestionnaire::selectQuestion (const structQuestion *question)
  2. {
  3. bool selected = false;//permet de savoir si une question a été sélectionnée
  4. //On ne sort pas de la boucle tant qu'on a pas une question non sélectionnée
  5. do
  6. {
  7.  rand100 = (( (double)rand() / (double)RAND_MAX) * RANGE_MAX + RANGE_MIN);//génération nombre aléatoire entre 0 et 99
  8.  //test si la question a déjà été sélectionné
  9.  if (!questionnaire[rand100].questSelected)
  10.  {
  11.   selected = true;
  12.   questionnaire[rand100].questSelected = true;
  13.   question->question = questionnaire[rand100].question;
  14.   question->answer1 = questionnaire[rand100].answer1;
  15.   question->answer2 = questionnaire[rand100].answer2;
  16.   question->answer3 = questionnaire[rand100].answer3;
  17.   question->goodAnswer = questionnaire[rand100].goodAnswer;
  18.   question->questSelected = questionnaire[rand100].questSelected;
  19.  };
  20. }while (!selected);
  21. }


 
- Extrait du code de la Form où j'ai l'erreur:
 

Code :
  1. structQuestion oneQuestion;
  2.                                  monQuestionnaire->selectQuestion(&oneQuestion);
  3.     string test;
  4.     structQuestion testQuestion;
  5.     testQuestion.question = "test";
  6.     lQuestion->Text = gcnew String (test.c_str());//Fonctionne !!!!
  7.     lQuestion->Text = gcnew String (testQuestion.question.c_str());//Fonctionne !!!!
  8.                                  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:
 

Citation :

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

Reply

Marsh Posté le 01-07-2009 à 10:46:05   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed