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 :

construire une feuille avec les libelles


Sujet :

C++

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Par défaut construire une feuille avec les libelles
    svp voilà ma dernière question pour ce soir
    je sais que j'ai poser trop de question mais j'ai pas le choix

    je dois construire une feuille avec les libelles verticaux et horizontaux et le nom voilà mon code mais ça me donne une erreur au niveau de : *this
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Feuille::Feuille(const std::vector<std::string>& lib,const std::vector<std::string>& libH,const string & leNom):titreFeuille(leNom)
    {
      for(unsigned  i=0;i<libH.size();i++)
      {
          if(_lig.find(lib[i])==_lig.end())
          {
              (*this)[libH[i]]=Ligne(lib);
          }
      }
    }
    si vous avez une idée merci de me le mentionner
    j'ai déjà réaliser les deux classe cellule et ligne avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Feuille
    {
        private:
        string titreFeuille;
        std::map<std::string, Ligne> _lig;
     
        public:
        Feuille(const std::vector<std::string>& lib,const std::vector<std::string>& libH,const string & leNom);
     
     
    };

  2. #2
    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,
    (*this)[...] suppose que l'opérateur [] puisse s'appliquer à ta classe. Ce qui n'est pas le cas. Si j'imagine que tu as voulu ajouter une entrée dans le map, alors c'est probablement cette ligne : _lig[libH[i]]=Ligne(lib);.
    Pour rappel, les identifiants débutant par un souligné '_' sont fortement déconseillé (Quels sont les identificateurs interdits par la norme ?).

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Par défaut surcharge de l'operateur [ ]
    merci pour votre réponse, mais même en utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lig[libH[i]]=Ligne(lib)
    ça ne marche pas

    j'ai essayé avec cette méthode ça me donne le même erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Feuille::Feuille(const std::vector<std::string>& libH)
    {
      const size_t size = libH.size(); 
      for(size_t i = 0; i < size; ++i)
         lig[libH[i]]=Ligne(lib);

  4. #4
    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
    Qu'est ce qui ne marche pas ? Peux tu afficher l'erreur du compilateur ?

  5. #5
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Par défaut erreur de constructeur
    voilà j'ai créer deux classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Cellule
    	{
    	private:
    		double   		maValeur;
    		bool	 		maPresence;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Ligne : public map<string,Cellule>{
          public:
          Ligne (std::vector <std::string> & m );
          //Les Méthodes
          void Saisir();
               };
    par la suite j'ai voulu construire la feuille avec les libelles verticaux et horizontaux et le nom:
    alors voilà ma classe feuille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Feuille : public map<string,Ligne>{
        public:
     
          Feuille (std::vector <std::string> & m, std::vector <std::string> & e );
    };
    et la définition de lu constructeur est comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Feuille::Feuille (std::vector <std::string> & m, std::vector <std::string> & e )
    {
    #ifdef MAP
    cout << "Appel au constructeur de <Feuille>" << endl;
    #endif
    // titreFeuille=n;
    for(unsigned int i=0 ; i< e.size() ;i++)
    (*this)[e[i]]=Ligne(m);
    }
    est l'erreur qui s'affiche c'est :
    Images attachées Images attachées  

  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,
    Les conteneurs ne sont pas des classes dont on peut hériter publiquement. Ligne et Feuille doivent donc avoir un membre std::map et non en hériter.

    J'imagine que le vecteur paramètre des classes sert à initialiser. Il devrait être passé par référence constante: const &.

    L'utilisation de l'opérateur [] de std::map nécessite que le type de l'élément ait un constructeur par défaut.

    L'alternative est de jouer avec les find et insert mais ça fini par ôter beaucoup de l'intérêt de std::map.

    Vérifie si cela a un sens d'ajouter un constructeur par défaut et si nécessaire, ajoute le.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Ligne
    {
    public:
       Ligne();
       Ligne (std::vector <std::string> const & m );
       //Les Méthodes
       void Saisir();
     
    private:
       std::map<std::string,Cellule> mon_map;
     
    };

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/05/2012, 23h36
  2. [Toutes versions] Remplir une ListBox avec les données d'une autre feuille
    Par Valoche37 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/01/2012, 16h25
  3. Construire des tableaux a partir d'une chaine avec les RegExp?
    Par Zineb1987_UNI dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/10/2009, 15h10
  4. [MySQL] Construire une liste avec les résultat d'une requête
    Par Requiem11 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/04/2009, 23h18
  5. [VBA-E] Parcourir les checkbox d'une feuille avec une boucle
    Par tonton fred dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/05/2007, 13h47

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