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 :

Retourner une référence sur un std::vector


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut Retourner une référence sur un std::vector
    Bonjour,

    J'ai une classe contenant un std::vector:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Test
    {
    public:
       std::vector<float>& GetData(void) const { return Data;}
     
    private:
       std::vector<float> Data;
    }
    auquel je souhaiterais accéder via une référence (pour éviter une recopie).
    J'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<float> &data = test.GetData();
    sans succès.

    Comment faire?

  2. #2
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    Est-ce que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<float>& GetData(void) const  { return (std::vector<float>&)m_Data;}
    vous semble correct?

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    renvoie un const std::vector<float>& , c'est plus cohérent non? Sinon pourquoi mettre "const" ta méthode?

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    Le problème vient effectivement du const, donc soit tu retournes une référence constante, soit tu enlèves le const de la déclaration de ta méthode.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par défaut
    Citation Envoyé par bolhrak Voir le message
    Le problème vient effectivement du const, donc soit tu retournes une référence constante, soit tu enlèves le const de la déclaration de ta méthode.
    j ajouterais que tu devrais peut etre ecrire deux methodes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    const std::vector<float>& GetData(void) const { return Data;}
     
    std::vector<float>& GetData(void){return Data;}

  6. #6
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    Ah voilà, j'avais oublié le const devant

    Merci beaucoup!

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 19/03/2007, 19h24
  2. Réponses: 2
    Dernier message: 13/12/2006, 13h39
  3. Réponses: 6
    Dernier message: 30/08/2006, 18h05
  4. Réponses: 6
    Dernier message: 28/09/2005, 11h30
  5. Comment avoir une référence sur une Vue
    Par Philippe299 dans le forum MFC
    Réponses: 1
    Dernier message: 12/08/2005, 10h03

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