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 :

Probl�me avec un vecteur contenant des r�f�rences constantes


Sujet :

C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    72
    D�tails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 72
    Par d�faut Probl�me avec un vecteur contenant des r�f�rences constantes
    Bonjour,

    J'ai une m�thode dont un des param�tres est de la forme:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    vector<const CImg<unsigned char>& >* imagelist
    Soit un pointeur vers un vecteur contenant des r�f�rences constantes sur des �lements de type CImg<unsigned char>

    Mon probl�me est que je ne parviens pas � r�cup�rer le contenu de ce vecteur. Cette ligne :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    const CImg<unsigned char>& a = (*imagelist)[i];
    provoque une flopp�e d'erreurs � la compilation que je ne parviens pas � d�chiffrer:

    [EDIT]En parcourant le log d'erreur sur le forum (plus lisible que sur ma console ), je me suis rendu compte que la ligne suivante provique aussi une erreur:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int dim_data = imagelist->size();
    , pourquoi ne puis-je donc pas appeller de m�thodes de mon objet vector ?[/EDIT]

    In file included from main.cc:10:
    /usr/include/c++/4.3/ext/new_allocator.h: In instantiation of �__gnu_cxx::new_allocator<const cimg_library::CImg<unsigned char>&>�:
    /usr/include/c++/4.3/bits/allocator.h:84: instantiated from �std::allocator<const cimg_library::CImg<unsigned char>&>�
    /usr/include/c++/4.3/bits/stl_vector.h:75: instantiated from �std::_Vector_base<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >�
    /usr/include/c++/4.3/bits/stl_vector.h:176: instantiated from �std::vector<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >�
    base/visu/V_Img.h:34: instantiated from here
    /usr/include/c++/4.3/ext/new_allocator.h:59: erreur: forming pointer to reference type �const cimg_library::CImg<unsigned char>&�
    /usr/include/c++/4.3/ext/new_allocator.h:60: erreur: forming pointer to reference type �const cimg_library::CImg<unsigned char>&�
    /usr/include/c++/4.3/ext/new_allocator.h:79: erreur: forming pointer to reference type �const cimg_library::CImg<unsigned char>&�
    /usr/include/c++/4.3/ext/new_allocator.h:82: erreur: forming pointer to reference type �const cimg_library::CImg<unsigned char>&�
    /usr/include/c++/4.3/ext/new_allocator.h:87: erreur: forming pointer to reference type �const cimg_library::CImg<unsigned char>&�
    /usr/include/c++/4.3/ext/new_allocator.h:97: erreur: forming pointer to reference type �const cimg_library::CImg<unsigned char>&�
    /usr/include/c++/4.3/ext/new_allocator.h:107: erreur: forming pointer to reference type �const cimg_library::CImg<unsigned char>&�
    /usr/include/c++/4.3/ext/new_allocator.h:118: erreur: forming pointer to reference type �const cimg_library::CImg<unsigned char>&�
    /usr/include/c++/4.3/bits/allocator.h: In instantiation of �std::allocator<const cimg_library::CImg<unsigned char>&>�:
    /usr/include/c++/4.3/bits/stl_vector.h:75: instantiated from �std::_Vector_base<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >�
    /usr/include/c++/4.3/bits/stl_vector.h:176: instantiated from �std::vector<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >�
    base/visu/V_Img.h:34: instantiated from here
    /usr/include/c++/4.3/bits/allocator.h:88: erreur: forming pointer to reference type �const cimg_library::CImg<unsigned char>&�
    /usr/include/c++/4.3/bits/allocator.h:89: erreur: forming pointer to reference type �const cimg_library::CImg<unsigned char>&�
    /usr/include/c++/4.3/bits/stl_vector.h: In instantiation of �std::_Vector_base<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >::_Vector_impl�:
    /usr/include/c++/4.3/bits/stl_vector.h:140: instantiated from �std::_Vector_base<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >�
    /usr/include/c++/4.3/bits/stl_vector.h:176: instantiated from �std::vector<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >�
    base/visu/V_Img.h:34: instantiated from here
    /usr/include/c++/4.3/bits/stl_vector.h:80: erreur: forming pointer to reference type �const cimg_library::CImg<unsigned char>&�
    /usr/include/c++/4.3/bits/stl_vector.h:81: erreur: forming pointer to reference type �const cimg_library::CImg<unsigned char>&�
    /usr/include/c++/4.3/bits/stl_vector.h:82: erreur: forming pointer to reference type �const cimg_library::CImg<unsigned char>&�
    /usr/include/c++/4.3/bits/stl_vector.h: In instantiation of �std::_Vector_base<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >�:
    /usr/include/c++/4.3/bits/stl_vector.h:176: instantiated from �std::vector<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >�
    base/visu/V_Img.h:34: instantiated from here
    /usr/include/c++/4.3/bits/stl_vector.h:143: erreur: forming pointer to reference type �const cimg_library::CImg<unsigned char>&�
    /usr/include/c++/4.3/bits/stl_vector.h:147: erreur: forming pointer to reference type �const cimg_library::CImg<unsigned char>&�
    /usr/include/c++/4.3/bits/stl_vector.h: In instantiation of �std::vector<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >�:
    base/visu/V_Img.h:34: instantiated from here
    /usr/include/c++/4.3/bits/stl_vector.h:202: erreur: no members matching �std::_Vector_base<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >::_M_allocate� in �struct std::_Vector_base<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >�
    /usr/include/c++/4.3/bits/stl_vector.h:203: erreur: no members matching �std::_Vector_base<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >::_M_deallocate� in �struct std::_Vector_base<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >�
    base/visu/V_Img.h: In constructor �V_Img::V_Img(std::vector<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >*, Base&, int)�:
    base/visu/V_Img.h:113: erreur: �img� was not declared in this scope
    /usr/include/c++/4.3/bits/stl_vector.h: In member function �size_t std::vector<_Tp, _Alloc>::size() const [with _Tp = const cimg_library::CImg<unsigned char>&, _Alloc = std::allocator<const cimg_library::CImg<unsigned char>&>]�:
    base/visu/V_Img.h:34: instantiated from here
    /usr/include/c++/4.3/bits/stl_vector.h:485: erreur: �const struct std::_Vector_base<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >::_Vector_impl� has no member named �_M_start�
    /usr/include/c++/4.3/bits/stl_vector.h:485: erreur: �const struct std::_Vector_base<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >::_Vector_impl� has no member named �_M_finish�
    /usr/include/c++/4.3/bits/stl_vector.h: In member function �typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::reference std::vector<_Tp, _Alloc>::operator[](size_t) [with _Tp = const cimg_library::CImg<unsigned char>&, _Alloc = std::allocator<const cimg_library::CImg<unsigned char>&>]�:
    base/visu/V_Img.h:101: instantiated from here
    /usr/include/c++/4.3/bits/stl_vector.h:563: erreur: �struct std::_Vector_base<const cimg_library::CImg<unsigned char>&, std::allocator<const cimg_library::CImg<unsigned char>&> >::_Vector_impl� has no member named �_M_start�
    make: *** [all] Erreur 1
    J'ai lu et relu mon code, je ne parviens pas � mettre le doigt sur l'erreur, avez vous une id�e ?

    Xav

  2. #2
    Membre �clair�
    Avatar de Flor�al
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    456
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 456
    Par d�faut
    Je n'ai jamais r�ussi � utiliser des vecteurs de r�f�rence. Essayes plut�t avec des pointeurs.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    72
    D�tails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 72
    Par d�faut
    Jusque l�, j'utilisais moi aussi les pointeurs, mais je dois utiliser les r�f�rences pour garantir que mes images (CImg<unsigned char>) ne soient pas modifi�es.

  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
    Citation Envoy� par systemofaxav Voir le message
    Jusque l�, j'utilisais moi aussi les pointeurs, mais je dois utiliser les r�f�rences pour garantir que mes images (CImg<unsigned char>) ne soient pas modifi�es.
    Et en quoi une r�f�rence te garantie mieux qu'un pointeur que tes images ne seront pas modifi�es ?

  5. #5
    R�dacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supa�ro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing Supa�ro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par d�faut
    Une r�f�rence est un alias sur un objet. Elle n'a pas d'adresse et n'est pas copiable. Donc c'est impossible � stocker (c'est la m�me raison qu'un pointeur sur une r�f�rence est un non sens, alors qu'une r�f�rence sur un pointeur a du sens)
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une tr�s bonne doc sur le C++ (en) Why linux is better (fr)

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    72
    D�tails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 72
    Par d�faut
    Citation Envoy� par 3DArchi Voir le message
    Et en quoi une r�f�rence te garantie mieux qu'un pointeur que tes images ne seront pas modifi�es ?

    En utilisant des const T&, je sais que seules les m�thodes const de mon objet T pourrons �tre appell�es, et ces m�thodes par d�finition ne modifient pas l'objet.

    J'ai besoin de passer un ensemble d'objets et faire en sorte qu'ils soient non modifiables... est-ce possible avec des pointeurs ?

    Merci pour vos r�ponses

  7. #7
    R�dacteur
    Avatar de Bakura
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par d�faut
    const T * ?? (Voir ici)

  8. #8
    Membre �clair�
    Avatar de Flor�al
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    456
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 456
    Par d�faut
    J'allais dire la m�me chose: un pointeur peut �tre contant (const T* itm const).

  9. #9
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    72
    D�tails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 72
    Par d�faut
    Tiens, j'avais le souvenir que ce n'�tait pas possible avec les pointeurs... en tout cas �a fonctionne, merci pour votre aide !!

    Xav

  10. #10
    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
    Juste une remarque : const s'applique � ce qu'il y a � gauche ... sauf s'il n'y a rien � gauche auquel cas c'est � droite. C'est d�j� assez confus comme �a, donc autant prendre l'habitude de placer const � la 'bonne' place :
    Je trouve que c'est d'autant plus important pour des pointeurs o� les possibilit�s s'accroissent rapidement :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    const T *ptr; // éviter
    T const *ptr; // équivalent à la précédente : à préférer
    T* const ptr; // différent avec les précédents !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 09/03/2011, 21h53
  2. [JDOM] Probl�me avec les nom contenant des tirets '-'
    Par malimaot dans le forum Format d'�change (XML, JSON...)
    R�ponses: 1
    Dernier message: 09/02/2011, 17h57
  3. Probl�me avec un switch contenant des strings
    Par dessinateurttuyen dans le forum Langage
    R�ponses: 6
    Dernier message: 18/07/2006, 12h56
  4. Probl�me avec une TImageList contenant des grandes images
    Par Manopower dans le forum Composants VCL
    R�ponses: 8
    Dernier message: 17/11/2005, 15h20
  5. probl�me avec ma requete contenant un "in" :
    Par seb78000 dans le forum Langage SQL
    R�ponses: 3
    Dernier message: 10/07/2005, 16h38

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