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

MFC Discussion :

Cstring et string


Sujet :

MFC

  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut Cstring et string
    Bonjour, je suis en train de faire un programme qui a pour but de lire une données dans un tableau qui se trouve en variable globale dans le fichier donnees.cpp. Je veux utiliser ce tableau dans le fichier test.cpp et il me dit :

    error C2679: '=' binaire*: aucun opérateur trouvé qui accepte un opérande de partie droite de type 'std::string' (ou il n'existe pas de conversion acceptable)

    voici le code mes deux fichiers :
    donnees.cpp
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    #include <iostream>
    #include "stdafx.h"
    #include <string>
    #include <fstream>
    using namespace std;
     
    const int nbdonnees = 66; //constante du nombre de donnees à recuperer
    string tabdonnees[nbdonnees]; //tableau servant à ranger mes donnees
    string tabvaleur[nbdonnees]; //tableau dans lequel seront rangées les valeurs des données
    void RangerDonnees(); //procedure qui rempli le tableau
     
     
    int main()
    {
     
    		int i =1; //indice de parcours du tableau où sont rangé les données du fichier matlab
    		string mot;
    		string chaine1;
     
    		RangerDonnees();
    		ifstream fichier("donnees.m", ios::in);  // on ouvre en lecture;
            if(fichier)  // si l'ouverture a fonctionné
            {
    			fichier >> mot; // on lit le premier mot du fichier
    			while(i != nbdonnees) //tant que l'on a pas recuperer toutes les valeurs
    			{
    				while(mot != tabdonnees[i] ) // tant que le mot est different du mot du tableau
    				{			
    					fichier >> mot; // on lit le mot suivant
    				}
    				fichier.seekg(2, ios::cur); //on se place sur la valeur à recuperer
    				fichier >> chaine1;	//on lit la valeur
    				tabvaleur[i] = chaine1; // on range la valeur dans le tableau
    				i++; //on passe à la donnee suivante
    			}
    			fichier.close();
            }
    		else
    		{        
    			cerr << "Impossible d'ouvrir le fichier1 !" << endl;
    		}
    		ofstream fic("test.txt", ios::out | ios::trunc);  // on ouvre en ecriture
    		if(fic)  // si l'ouverture a fonctionné
            {
    			i=1;
    			while(i != nbdonnees)
    			{
    				fic << tabdonnees[i]<< " = ";   //on ecrit dans test.txt
    				fic << tabvaleur[i] << endl; 
    				i++;
    			}
    			fic.close();
    		}
    		else
    		{        
    			cerr << "Impossible d'ouvrir le fichier2 !" << endl;
    		}
            return 0;
    }
     
    void RangerDonnees()
    {
    		tabdonnees[1] = "type_assemblage";
    		tabdonnees[2] = "type_bague";
    		tabdonnees[3] = "Nombre_de_pistes";
    		tabdonnees[4] = "type_element_roulant";
    		tabdonnees[5] = "E_bague";
    		tabdonnees[6] = "nu_bague";
    		tabdonnees[7] = "h_totale_bague";
    }
    test.cpp
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    #include "stdafx.h"
    #include "test.h"
    #include "donnees.cpp"
     
    #include "testDoc.h"
    #include "testView.h"
    #include ".\testview.h"
     
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
     
     
    // CtestView
     
    IMPLEMENT_DYNCREATE(CtestView, CFormView)
     
    BEGIN_MESSAGE_MAP(CtestView, CFormView)
     
    	ON_BN_CLICKED(IDC_BUTTONOK, OnBnClickedButtonok)
    END_MESSAGE_MAP()
     
    // construction ou destruction*de CtestView
     
    CtestView::CtestView()
    	: CFormView(CtestView::IDD)
    	, m_strNom(_T(""))
    	, m_strPrenom(_T(""))
    	, m_strAdresse(_T(""))
    	, m_strCdp(_T(""))
    	, m_strVille(_T(""))
    {
    	// TODO : ajoutez ici le code d'une construction
     
    }
     
    CtestView::~CtestView()
    {
    }
     
    void CtestView::DoDataExchange(CDataExchange* pDX)
    {
    	CFormView::DoDataExchange(pDX);
    	DDX_Text(pDX, IDC_EDIT1, m_strNom);
    	DDX_Text(pDX, IDC_EDIT3, m_strPrenom);
    	DDX_Text(pDX, IDC_EDIT5, m_strAdresse);
    	DDX_Text(pDX, IDC_EDIT4, m_strCdp);
    	DDX_Text(pDX, IDC_EDIT2, m_strVille);
    	DDX_Control(pDX, IDC_BUTTONRAZ, m_strRAZ);
    	DDX_Control(pDX, IDC_EDIT1, m_EditNom);
    }
     
    void CtestView::OnInitialUpdate()
    {
    	CFormView::OnInitialUpdate();
    	GetParentFrame()->RecalcLayout();
    	ResizeParentToFit();
     
    	//initialisation manuelle
    	m_strNom = tabvaleur[2];
    	UpdateData(FALSE);
    je n'ai pas mis tout le code, seulement la partie qui est utile.

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    m_strNom = tabvaleur[2].c_str();

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    Merci, je l'ai utilisé mais maintenant qu'il compile correctement il me sort des erreurs que je ne comprend pas.

    test error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > * tabvaleur" (?tabvaleur@@3PAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) déjà défini(e) dans donnees.obj

    test error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > * tabdonnees" (?tabdonnees@@3PAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) déjà défini(e) dans donnees.obj

    test error LNK2005: "void __cdecl RangerDonnees(void)" (?RangerDonnees@@YAXXZ) déjà défini(e) dans donnees.obj

    test error LNK2005: _main déjà défini(e) dans donnees.obj

    Je n'ai pas de fichier donnees.obj et je ne le trouve pas.
    Merci pour votre aide.

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    dans ton fichier test.cpp
    il y a un include
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "donnees.cpp"
    

    ????
    on ne met pas un .cpp en include on le rajoute au projet...
    j'ai l'impression que tu te fais des sacs de noeuds avec la déclaration des variables globales qui au demeurant est une mauvaise idée en programmation objet.
    ensuite je ne comprends pas comment tu peux avoir un main et une view de type MFC dans le même programme ....



  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    Ouh la! Je débute en programmation VC++. Je maitrise le C++ mais la c'est la premiere fois que je fais un projet. Si je ne déclare pas les variables en variables globales, je ne peux pas les utiliser dans test.cpp. De plus, je suis d'accord pour que dans le include il ne devrait pas y avoir de .cpp. donnees.cpp est deja dans le projet. Mais je ne trouve pas d'autre solution qui fonctionne. Je travaille en general sous Linux et je n'ai pas ce genre de problemes. Dsl de vous embeter.

    Si tu as des conseils à me donner je les prends volontiers.
    Merci d'avance.

    Je suis en train de m'entrainer avec la doc que tu as fait mais comme ma version est legerement différente je galere pour trouver les bons onglets.

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    la déclaration de variables externes en c++ est indépendante de la plateforme de développement ou d'OS

    pour déclarer les variables il suffit de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    extern const int nbdonnees ; //constante du nombre de donnees à recuperer
    extern string tabdonnees[]; //tableau servant à ranger mes donnees
    extern string tabvaleur[]; //tableau dans lequel seront rangées les valeurs des données
    mais bon ça résoudra ton problème qu'a moitié : ton projet ne peut fonctionner.
    soit c'est un programme console MFC, soit c'est un programme graphique MFC en choisissant un des modèles proposés: dialog,SDI,MDI.
    mais un programme console (donc avec un main) et une fenêtre MFC ça ne peut fonctionner...

  7. #7
    Membre confirmé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    Je te remercie, je vais utiliser ça. Pour ce qui est de donnees.cpp, je pense que je vais en faire une fonction ou procedure dans mon nouveau projet. Je vais tester.
    Merci encore A++.

  8. #8
    Membre confirmé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    Salut,
    j'arrive à convertir un String en CString mais pas l'inverse. Quelqu'un peut-il m'aider, j'ai fait des recherches mais je ne trouve pas.
    Merci.

  9. #9
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    et pourtant ...
    la conversion est implicite la CString fournit l'opérateur const char *
    (sauf en unicode)
    une simple affectation fonctionne.

  10. #10
    Membre confirmé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    Ok merci, j'avais aussi oublié d'inclure la classe Cstring. Ca risquait pas de marcher. je suis nul quand je m'y met. Vivement le week-end. J'en ai besoin. lol

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. DLL avec paramètres CString et String en .net
    Par basnifo dans le forum C++/CLI
    Réponses: 3
    Dernier message: 25/09/2008, 19h45
  2. Conversion CString vers string
    Par CyberSlan dans le forum MFC
    Réponses: 7
    Dernier message: 26/05/2008, 18h24
  3. Conversion Mfc CString en string
    Par jagboys dans le forum C++/CLI
    Réponses: 2
    Dernier message: 19/12/2007, 14h38
  4. [CString] conversion string
    Par maxdwarf dans le forum MFC
    Réponses: 6
    Dernier message: 22/09/2006, 22h54
  5. CString et STring : cast
    Par firejocker dans le forum MFC
    Réponses: 10
    Dernier message: 15/11/2005, 15h11

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