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

  1. #1
    Candidat au Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    avril 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : avril 2018
    Messages : 3
    Points : 2
    Points
    2

    Par défaut Problème pour implanter une fonction amie

    Bonjour,

    je rencontre un petit problème avec une fonction amie qui a pour but d'accéder à un attribut (vector) d'une autre classe, afin de le trier et
    d'enlever les doublons,
    pas d'erreur lors de la compilation mais le programme ne fait pas le travail, la classe Calendrier est OK, mais pas la classe Equipes
    la fonction semble inopérante: le vector (ListEquipes) qui récupère l'attribut semble vide

    Voici le code des différents fichiers, je ne comprend pas pourquoi la fonction amie est inopérante,
    merci par avance pour votre aide

    Cordialement, Khor

    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
    //main.cpp
     
    #include "Calendrier.hpp"
    #include "Equipes.hpp"
     
    int main()
    {
        std::vector<std::string> m_Date;
        std::vector<std::string> m_Heure;
        std::vector<std::string> m_EquipDom;
        std::vector<std::string> m_ScorDom;
        std::vector<std::string> m_ScorExt;
        std::vector<std::string> m_EquipExt;
     
     
    	Calendrier calendrier(m_Date,m_Heure,m_EquipDom,m_ScorDom,m_ScorExt,m_EquipExt);
    	calendrier.ChargerFic();
        calendrier.Afficher();
     
     
        std::vector<std::string> m_ListEquipes;
        int m_NbreEquipes=0;
     
        Equipes equipes(m_ListEquipes,m_NbreEquipes);
        equipes.TrierEquipes(m_EquipDom);
     
     
    return 0;
    }
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    //Calendrier.cpp
     
    #include <sstream>
    #include <iostream>
    #include <fstream>
     
    #include "Calendrier.hpp"
    //#include "Equipes.hpp"
     
     
    Calendrier::Calendrier(std::vector<std::string> m_Date,std::vector<std::string> m_Heure,std::vector<std::string> m_EquipDom,std::vector<std::string> m_ScorDom,std::vector<std::string> m_ScorExt,std::vector<std::string> m_EquipExt)
        {
        std::vector<std::string> Date=m_Date;
        std::vector<std::string> Heure=m_Heure;
        std::vector<std::string> EquipDom=m_EquipDom;
        std::vector<std::string> ScorDom=m_ScorDom;
        std::vector<std::string> ScorExt=m_ScorExt;
        std::vector<std::string> EquipExt=m_EquipExt;
        }
     
    void Calendrier::ChargerFic()
     
    {
        char nomfichier[20];
        std::string ligne;
        const std::string lim = ";";
        std::string enreg;
     
        //std::cout << "Entrer le nom d'un fichier existant: "; Le nom sera selectionné à partir d'une boite de dialogue
        //std::cin.get (nomfichier,20);    // get c-string
        std::ifstream fichier("ANG.txt", std::ios::in);
     
    if(fichier)  // si l'ouverture a réussi
    {
        while ( std::getline( fichier, ligne ) )
        {
            for (int j=0; j<=5; j++)
            {
                int deb=0;
     
                std::size_t postn = ligne.find(lim);
                std::string newligne = ligne.substr(postn);
                enreg = ligne.substr(deb,postn);
     
                switch(j)
                {
                    case 0:
                        Date.push_back(enreg);
                        break;
                    case 1:
                        Heure.push_back(enreg);
                        break;
                    case 2:
                        EquipDom.push_back(enreg);
                        break;
                    case 3:
                        ScorDom.push_back(enreg);
                        break;
                    case 4:
                        ScorExt.push_back(enreg);
                        break;
                    case 5:
                        EquipExt.push_back(enreg);
                        break;
                }
     
                    newligne = ligne.substr(postn + 1);
                    deb = postn + 1;
                    ligne = newligne;
            }
     
        }
     
    }
    else
        std::cerr << "Impossible d'ouvrir le fichier !" << std::endl;
    }
     
    void Calendrier::Afficher()
    {
     
    for (int i=0; i < ScorExt.size(); i++)
    	{
    		std::cout << ScorExt[i] << " ";
    		std::cout << std::endl;
    	}
    }
    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
    //Equipes.cpp
     
    #include <algorithm>
    #include <iostream>
     
    #include "Equipes.hpp"
    //#include "Calendrier.hpp"
     
    Equipes::Equipes(std::vector<std::string> m_ListEquipes,int m_NbreEquipes)
    {
      std::vector<std::string> ListEquipes=m_ListEquipes;
      int NbreEquipes=m_NbreEquipes;
    }
     
    void Equipes::TrierEquipes(std::vector<std::string> EquipDom)
    {
        std::sort(EquipDom.begin(), EquipDom.end());
        std::unique_copy(EquipDom.begin(), EquipDom.end(), std::back_inserter(ListEquipes));
        int NbreEquipes=ListEquipes.size();
        //return ListEquipes;
    }
    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
    //Calendrier.hpp
     
    #ifndef CALENDRIER_H_INCLUDED
    #define CALENDRIER_H_INCLUDED
     
    #include <vector>
    #include <string>
     
    //#include "Equipes.hpp"
     
    class Equipes;
    class Calendrier
    {
    friend void TrierEquipes(std::vector<std::string> EquipDom);//si "AfficherEquipes" seul pas d'erreur mais "TrierEquipes" ne donne rien
    //friend void AfficherEquipes(std::vector<std::string> CalendEquipDom);
                                                                            //sinon:|error: invalid use of incomplete type 'class Equipes'|
     private :
        std::vector<std::string> Date;
        std::vector<std::string> Heure;
        std::vector<std::string> EquipDom;
        std::vector<std::string> ScorDom;
        std::vector<std::string> ScorExt;
        std::vector<std::string> EquipExt;
     
     public :
        Calendrier();
        Calendrier (std::vector<std::string> m_Date,std::vector<std::string> m_Heure,std::vector<std::string> m_EquipDom,std::vector<std::string> m_ScorDom,std::vector<std::string> m_ScorExt,std::vector<std::string> m_EquipExt);
        ~Calendrier() = default;
     
    	void ChargerFic();
    	void Afficher();
    };
     
    #endif  //CALENDRIER_H_INCLUDED
    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
    //Equipes.hpp
     
    #ifndef EQUIPES_H_INCLUDED
    #define EQUIPES_H_INCLUDED
     
    #include <vector>
    #include <string>
     
    //#include "Calendrier.hpp"
     
    class Calendrier;
    class Equipes
    {
    	private:
    		std::vector<std::string> ListEquipes;
    		int NbreEquipes;
     
    	public:
    		Equipes();
    		Equipes(std::vector<std::string> m_ListEquipes,int m_NbreEquipes);
    		void TrierEquipes(std::vector<std::string> EquipDom);
    		~Equipes() = default;
     
    };
     
    #endif // EQUIPES_H_INCLUDED

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    mai 2016
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2016
    Messages : 261
    Points : 968
    Points
    968

    Par défaut

    TrierEquipes prend en paramètre une valeur (de type std::vector<std::string>), alors qu'il faudrait lui passer une référence si tu veux récupérer quelque chose, std::vector<std::string>&.

  3. #3
    r0d
    r0d est déconnecté
    Expert éminent

    Profil pro
    Inscrit en
    août 2004
    Messages
    4 242
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : août 2004
    Messages : 4 242
    Points : 6 168
    Points
    6 168
    Billets dans le blog
    1

    Par défaut

    Je suppute également que le constructeur Equipes est incorrect (redéclaration de ListEquipes):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Equipes::Equipes(std::vector<std::string> m_ListEquipes,int m_NbreEquipes)
    {
      std::vector<std::string> ListEquipes=m_ListEquipes;
      int NbreEquipes=m_NbreEquipes;
    }
    devrait être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Equipes::Equipes(std::vector<std::string> m_ListEquipes,int m_NbreEquipes)
    {
      ListEquipes=m_ListEquipes;
      NbreEquipes=m_NbreEquipes;
    }
    A match made in heaven
    Paved the road to hell

  4. #4
    Modérateur

    Avatar de Winjerome
    Homme Profil pro
    Inscrit en
    septembre 2009
    Messages
    10 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 167
    Points : 50 363
    Points
    50 363

    Par défaut

    Bonsoir,

    Ou mieux en utilisant la liste d'initialisation faite pour ça.
    Attention, le problème est également présent dans le constructeur de la classe Calendrier.

    Sinon habituellement ce sont les membres que l'on préfixe de « m_ » et non l'inverse.
    Avant de poser votre question : FAQ, Tutoriels et recherche sur le forum
    Une erreur ? Messages d'erreur et avertissements
    "Ça ne marche pas" n'apporte aucune information utile permettant de vous aider. Expliquez clairement votre problème (erreurs entières, résultat souhaité vs obtenu...).
    En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
    L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
    Mes extensions FireDVP (Firefox), ChroDVP (Chrome) : suivi des nouveaux messages, boutons/raccourcis et bien plus !

  5. #5
    Candidat au Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    avril 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : avril 2018
    Messages : 3
    Points : 2
    Points
    2

    Par défaut

    Bonjour,

    Merci pour vos diverses corrections,

    après avoir apporté les corrections nécessaires (le compilateur ne m'a pas prévenu de la redondance des déclarations), débutant j'évite pour le moment les pointeurs et références,
    malgré les corrections et l'utilisation d'une référence comme suggérée par Wolin , je n'accède pas à la variable voulue, d'où quelques petites questions :
    peut-on accéder à un seul des attributs d'une classe, si oui comment le déclarer ?

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    5 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 5 596
    Points : 24 556
    Points
    24 556

    Par défaut

    Citation Envoyé par Khornaaig Voir le message
    peut-on accéder à un seul des attributs d'une classe, si oui comment le déclarer ?
    Tu veux dire que t'ignores l'opérateur . pour accéder aux variables et fonctions membres ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2005
    Messages
    4 654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : février 2005
    Messages : 4 654
    Points : 10 846
    Points
    10 846

    Par défaut

    Heu, pourquoi "TrierEquipes" a besoin d'être amie de la classe Calendrier ?

  8. #8
    Candidat au Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    avril 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : avril 2018
    Messages : 3
    Points : 2
    Points
    2

    Par défaut

    Merci pour vos réponses, je pense revoir la conception de 0

    Cordialement, Khornaaig

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

Discussions similaires

  1. Problème pour lancer une fonction dans une classe
    Par Jiyuu dans le forum Général Python
    Réponses: 13
    Dernier message: 24/08/2010, 10h05
  2. Problème pour modifier une fonction
    Par condor_01 dans le forum C
    Réponses: 5
    Dernier message: 06/11/2007, 00h03
  3. Problème pour tracer une fonction créneau
    Par Erzvinh dans le forum MATLAB
    Réponses: 8
    Dernier message: 02/02/2007, 17h53
  4. Réponses: 7
    Dernier message: 10/09/2005, 17h49
  5. [DLL] problème pour appeler une fonction d'une DLL
    Par bigboomshakala dans le forum MFC
    Réponses: 34
    Dernier message: 19/07/2004, 12h30

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