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 :

probleme avec les constantes


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 160
    Points : 49
    Points
    49
    Par défaut probleme avec les constantes
    Bonjour
    j ai un probleme avec une constante,
    cette fonction est censé renvoyer un pointeur vers un vecteur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      Interval* Schedule::return_interval(Interval* i)const{
    	for (Schedule::const_iterator it = begin(); it != end(); it++){
    		if ((*it)->getInterval()->getId()==i->getId() && (*it)->getInterval()->getAvailabilityStart()==i->getAvailabilityStart()){
    			return *it->getInterval() ;
    		}
    	}
    }
    lors de la compilation, j obtient cette erreur, pouvez vous m'aider SVP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    src/Schedule.cpp: In member function ‘Interval* Schedule::return_interval(Interval*) const’:
    src/Schedule.cpp:104:16: error: request for member ‘getInterval’ in ‘* it.std::_Rb_tree_const_iterator<_Tp>::operator-> [with _Tp = const Allocation*, std::_Rb_tree_const_iterator<_Tp>::pointer = const Allocation* const*]()’, which is of non-class type ‘const Allocation* const
    tout apport va etre utilise
    Merci

  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
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    C'est difficile de répondre comme ça. Il nous en faudrait un peu plus sur Schedule et sur Interval.
    A tout hasard, j'avance ça :
    Interval const* Schedule::return_interval(Interval* i)const.

    Pour faire des recherches, il existe l'algorithme std::find (exemple en C++1, mais se fait à l'identique en C++98 avec un foncteur) :
    Code C++11 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Interval const* Schedule::return_interval(Interval* i)const
    {
       return std::find(begin(),end(),[i](decltype(*begin()) elt_)
          {
             return elt_->getInterval()->getId()==i->getId()
                && elt_->getInterval()->getAvailabilityStart()==i->getAvailabilityStart
          }
       )->getInterval();
    }

    Il est difficile de manipuler correctement des pointeurs. C'est pour cela qu'on préfère utiliser les pointeurs intelligents (cf Présentation des pointeurs intelligents en C++ par Loïc Joly).

  3. #3
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Pour faire des recherches, il existe l'algorithme std::find (exemple en C++1, mais se fait à l'identique en C++98 avec un foncteur) :
    Code C++11 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Interval const* Schedule::return_interval(Interval* i)const
    {
       return std::find(begin(),end(),[i](decltype(*begin()) elt_)
          {
             return elt_->getInterval()->getId()==i->getId()
                && elt_->getInterval()->getAvailabilityStart()==i->getAvailabilityStart
          }
       )->getInterval();
    }
    Ca serait pas plutot std::find_if() ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Je pencherais dans un premier temps pour : getInterval() n'est pas const et ne renvoie pas un objet const.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  5. #5
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Klaim Voir le message
    Ca serait pas plutot std::find_if() ?
    si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Interval const* Schedule::return_interval(Interval const* i)const
    {
       return std::find_if(begin(),end(),[i](decltype(*begin()) elt_)
          {
             return elt_->getInterval()->getId()==i->getId()
                && elt_->getInterval()->getAvailabilityStart()==i->getAvailabilityStart
          }
       )->getInterval();
    }
    Citation Envoyé par Emmanuel Deloget Voir le message
    Je pencherais dans un premier temps pour : getInterval() n'est pas const et ne renvoie pas un objet const.
    Yes. Ce qui explique pourquoi i n'est pas passée par pointeur constant (d'ailleurs, référence constante serait mieux puisque le pointeur ne peut être nul d'après ce qui est proposé au début).

Discussions similaires

  1. Help!! Probleme avec les dates sur SQL SERVER
    Par Nadaa dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 03/08/2006, 16h55
  2. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2004, 13h26
  3. [langage] probleme avec les listes dans des listes
    Par pqmoltonel dans le forum Langage
    Réponses: 7
    Dernier message: 27/04/2004, 12h32
  4. Problem avec les *.AVI sur les panels
    Par NaDiA_SoFt dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/08/2003, 22h50
  5. probleme avec les processus
    Par saidi dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/02/2003, 00h18

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