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

C++ Discussion :

appel d'un vector créé dans une autre classe


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Par défaut appel d'un vector créé dans une autre classe
    Bonjour, j'expose mon probleme.

    Une classe me crée un vector comme suit, je n'ai mis que la partie de code utile pour la compréhension de mon pb.
    Ma map est bien remplie, (je l'ai verifie)
    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
     
    map<string, float> Maclasse::Mafonction(Configuration* cnf)
    {.....
    .....
    .....
    map<string, int> monvecteur
            if (file)
    	{
    		while(!file.fail())
     
    		{
    		  file>>nom>>valeur;
    		  monvecteur[nom]=valeur;		
    		  cout<<nom<<"-"<<valeur<<endl;
    		}
     
     
     
    	}
    	else
    	{
    		cout<<"ERROR :  can't open file";
    	}
    		return monvecteur;		
    }
    Maintenant et c'est la que j'ai un problème, je veux utiliser les valeurs de cette map pour faire des calculs mathématique. Je fais dans une autre classe(un autre .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
    
    bool Moncalcul::CalculMath(map<string, double>*& blabla)
    
    {	
    	cout<<"bonjour : "<<endl;    Jusque la ca marche
    	for (map<string, float>::iterator myiter = monvecteur->begin(); myiter!=monvecteur->end(); myiter++)
    	{
    		cout<<"nom: "<<myiter->first<<endl;
                    mon calcul = puis la formule;
    	}
    	
    	return true;
            blabla = moncalcul;
    }
    
    C'est comme si il n'arrivait pas a rentrer dans la boucle for. J'ai l'impression qu'il n'arrive pas a trouver cette map.
    Pourtant cette fois ci j'ai bien fais une instance de ma classe en créant l'objet
    dans mon main de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaClasse* truc = MaClasse
    truc->Mafonction();
    puis idem pour ma seconde classe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonCalcul* truc2 = MonCalcul
    truc2->CalculMath();
    J'ai n'ai aucun message d'erreur. Juste un plantage sur le moment en rouge
    Merci.

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Par défaut
    Je ne vois aucun appel à "Maclasse::Moncalcul" dans le code que tu as posté, et c'est là que je pense qu'il y a une erreur.

    Par contre fait attention au code que tu poste, ça ne compilera pas là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector<string, int> map
    Il manque le ";" et tu as mis "vector" au lieu de "map".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bool Moncalcul::Moncalcul(map<string, double>*& blabla)
    float moncalcul;
    {
    J'ai mis du temps à comprendre Tu as inversé les 2 dernière lignes je suppose ?

    Ensuite, le nom de ta map passée en argument est "blabla", alors que dans le code de "Moncalcul" tu utilises "map".

    Sinon, pourquoi utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map<string, double>*& blabla
    ... comme argument de Moncalcul ? Un référence ou un pointeur aurait suffi, non ?

  3. #3
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Par défaut
    Par contre fait attention au code que tu poste, ça ne compilera pas là
    Oui, c'est clair, c'est juste pour l'exemple.

    Tu as inversé les 2 dernière lignes je suppose ?
    Effectivement, mais tout ceci est bien fait dans mon code original. Je fais tout de même la correction ici.


    Je ne vois aucun appel à "Maclasse::Moncalcul" dans le code que tu as posté, et c'est là que je pense qu'il y a une erreur.
    J'ai écris "idem pour ma deuxième classe", donc j'ai bien circonstancie cette objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Un référence ou un pointeur aurait suffi, non ?
    Oui et non,
    En fait, je crée de cette façon un pointeur placé en référence pour ne pas a avoir de problème lors de la destruction. Par ailleurs, j'ai beaucoup de fonction et le fais de renvoyer un bool me permet de rester plus clair et de voir si tout c'est passe correctement rapidement.
    Cela dit, je peux aussi faire comme tu dis.


    Merci d'avoir pris le temps de lire mon code.

    Dans la logique tout y est...mais je suis tout de même passé a cote de qq chose .

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 35
    Par défaut
    Salut,

    j'ai du mal a suivre ton code mais ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (map<string, float>::iterator myiter = map->begin(); myiter!=map->end(); myiter++)
    ne devrait-t'il pas se réécrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (map<string, float>::iterator myiter = blabla->begin(); myiter!=blabla->end(); myiter++)
    ?

  5. #5
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Par défaut
    Pas tout a fait tu mais par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (map<string, float>::iterator myiter = monvecteur->begin(); myiter!=monvecteur->end(); myiter++
    Mais dans mon vrai code cela est bien fait aussi.
    Pour donner plus de précision, je viens de créer un map dans la classe 1
    que je cherche a appeler dans la classe 2 en itérant dessus .Ce processus d'itération ne fonctionne pas.

    Cette map est crée est vit quelque part (ou pas). Je me demande tout a coup ci la map n'a pas été détruite ce qui expliquerait le pb. Mais alors Comment la recuperer?
    Tout en sachant que j'ai instancié mon nouvel objet dans le meme ce qui revient utiliser le mot static.

    Encore Merci

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    1/ Je ne suis pas convaincu de ton explication sur le pointeur et je sens une mauvaise raison.
    2/ Tu as trop simplifié. Fournis un code minimal à partir de ce que tu as fais qui compile et qui reproduit le bug.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/10/2007, 18h04
  2. Réponses: 5
    Dernier message: 10/10/2007, 13h54
  3. Appel d'une fonction dans une autre classe
    Par Analfabete dans le forum wxPython
    Réponses: 3
    Dernier message: 01/10/2007, 09h45
  4. Réponses: 2
    Dernier message: 22/12/2006, 11h35
  5. Probleme appel de fct dans une autre classe
    Par crakotte_finance dans le forum C++
    Réponses: 6
    Dernier message: 09/10/2006, 21h22

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