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