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

Boost C++ Discussion :

Problème avec les pointeurs intelligents de boost.


Sujet :

Boost C++

  1. #1
    Membre actif
    Avatar de Le Barde
    Homme Profil pro
    Chanteur
    Inscrit en
    Juillet 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chanteur

    Informations forums :
    Inscription : Juillet 2007
    Messages : 343
    Points : 259
    Points
    259
    Par défaut Problème avec les pointeurs intelligents de boost.
    Bonjour à tous,
    J'ai un petit souci quant à l'utilisation des smart pointers. Mais je vous montre sans plus attendre le problème :

    Voici le .cpp de la méthode qui pose problème : (désolé pour l'indentation très large)

    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
    ListePalierPtr AtelierPerfo::ConstruitListePaliers()
    	{
    		int Compteur=0;
    		PalierPtr palier;
    		//ListeTrieePalierPtr<double, PalierPtr> liste;
    		ListeTrieePalierPtr liste;
    		liste.reset( new ListeTrieePalier());
    		
    		// Premier palier
    		palier.reset( new Palier((AtelierPerfoPtr)this));
    		palier->PremierPalier();
    		
    		while (palier.get() != NULL)
    		{
    			
    			// Détermination de la borne supérieure
    			CalculPijReel();
    			palier->borneSup = ordo->NEH(); // on avait palier->borneSup = ordo->NEH();
    			std::cout << "BIP " << Compteur << std::endl;
    			std::cout << "Borne inférieure du palier : " << palier->borneInf << std::endl;
    			liste->Ajouter(palier->GetborneInf(),palier);
    			std::cout << "BIP - second " << Compteur << std::endl;
    			
    			// Autres paliers
    			palier.reset( palier->PalierSuivant().get());
    			
    			Compteur++;
    		}
    			std::cout << "BIP ConstruitListePaliers finie !" << std::endl;
    			return((ListePalierPtr)liste);
    	}
    Les types MachinPtr sont définis de cette manière :

    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
    #ifndef Definitions_H
    #define Definitions_H
     
    #include <boost/shared_ptr.hpp>
    #include <boost/array.hpp>
    #include <boost/shared_array.hpp>
    #include <boost/multi_array.hpp>
     
    //#include "../Flowshop/Atelier.h"
    //#include "../Flowshop/Ordo.h"
    //#include "../Flowshop/BandB/BandB.h"
     
    // (Re)définition des différentes classes utilisées dans le projet.
    class Atelier;
    class Ordo;
    class AtelierPerfo;
    class Palier;
    class Noeud;
    class ListeNoeuds;
    class BandB;
    class PalierPremierDernierJob;
    template<typename INDICE, typename TYPE> class ListeTriee;
    template<typename TYPE> class Liste;
     
     
    // Définition des pointeurs intelligents tels qu'ils sont utilisés.
    // (À ce titre voir l'article http://arb.developpez.com/c++/raii/shared_ptr/ ,
    // on y apprend que les pointeurs intelligents font office de ramasse-miettes.
    typedef boost::shared_ptr<int> intPtr;
    typedef boost::shared_ptr<Atelier> AtelierPtr;
    typedef boost::shared_ptr<Ordo> OrdoPtr;
    typedef boost::shared_ptr<AtelierPerfo> AtelierPerfoPtr;
    typedef boost::shared_ptr<Palier> PalierPtr;
    typedef boost::shared_ptr<Noeud> NoeudPtr;
    typedef boost::shared_ptr<ListeNoeuds> ListeNoeudsPtr;
    typedef boost::shared_ptr<BandB> BandBPtr;
    typedef boost::shared_ptr<PalierPremierDernierJob> PalierPremierDernierJobPtr;
     
    // déclaration des listes triées de paliers indexées par des réels _double_
    typedef ListeTriee<double, PalierPtr> ListeTrieePalier;
    typedef Liste<Palier> ListePalier;
    typedef boost::shared_ptr<ListeTrieePalier> ListeTrieePalierPtr;
    typedef boost::shared_ptr<ListePalier> ListePalierPtr;
     
     
     
    // Vecteurs
    typedef boost::shared_array<Atelier> AtelierArray;
    typedef boost::shared_array<int> intArray;
    typedef boost::shared_array<double> doubleArray;
    typedef boost::shared_array<Palier> PalierArray;
    //typedef boost::shared_array<Noeud> NoeudArray;
     
    // Tableaux
     
    //typedef boost::multi_array<double, 2> doubleTableau;
    typedef boost::shared_array< boost::shared_array<double> > doubleTableau;
     
     
    #endif
    Et alors, le message d'erreur à la compilation :

    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
    cd '/home/adrien/Documents/Travail/recherche/StageFlowShop/C++' && QTDIR="/usr/share/qt3" make -j1 
    g++ -c -pipe -Wall -W -g -D_REENTRANT -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_TABLET_SUPPORT -I/usr/share/qt3/mkspecs/default -I. -I/usr/include/qt3 -o AtelierPerfo.o FlowshopPerfo/AtelierPerfo.cpp
    /usr/include/boost/shared_ptr.hpp: In constructor «boost::shared_ptr<T>::shared_ptr(const boost::shared_ptr<Y>&) [with Y = Palier, T = boost::shared_ptr<Palier>]":
    FlowshopPerfo/AtelierPerfo.cpp:329: instantiated from here
    /usr/include/boost/shared_ptr.hpp:162: erreur: cannot convert «Palier* const" to «boost::shared_ptr<Palier>*" in initialization
    FlowshopPerfo/../ClassesAnnexes/ListeTriee.tpp: In member function «void ListeTriee<INDICE, TYPE>::Ajouter(INDICE, boost::shared_ptr<U>) [with INDICE = double, TYPE = boost::shared_ptr<Palier>]":
    FlowshopPerfo/AtelierPerfo.cpp:329: instantiated from here
    FlowshopPerfo/../ClassesAnnexes/ListeTriee.tpp:15: erreur: «class boost::shared_array<boost::shared_ptr<boost::shared_ptr<Palier> > >" has no member named «push_back"
    FlowshopPerfo/../ClassesAnnexes/ListeTriee.tpp:16: erreur: «class boost::shared_array<double>" has no member named «push_back"
    /usr/include/boost/shared_ptr.hpp: In constructor «boost::shared_ptr<T>::shared_ptr(const boost::shared_ptr<Y>&) [with Y = ListeTriee<double, boost::shared_ptr<Palier> >, T = Liste<Palier>]":
    FlowshopPerfo/AtelierPerfo.cpp:338: instantiated from here
    /usr/include/boost/shared_ptr.hpp:162: erreur: cannot convert «ListeTriee<double, boost::shared_ptr<Palier> >* const" to «Liste<Palier>*" in initialization
    FlowshopPerfo/../ClassesAnnexes/ListeTriee.tpp: In destructor «ListeTriee<INDICE, TYPE>::~ListeTriee() [with INDICE = double, TYPE = boost::shared_ptr<Palier>]":
    /usr/include/boost/checked_delete.hpp:34: instantiated from «void boost::checked_delete(T*) [with T = ListeTrieePalier]"
    /usr/include/boost/detail/shared_count.hpp:86: instantiated from «boost::detail::shared_count::shared_count(Y*) [with Y = ListeTrieePalier]"
    /usr/include/boost/shared_ptr.hpp:124: instantiated from «boost::shared_ptr<T>::shared_ptr(Y*) [with Y = ListeTrieePalier, T = ListeTriee<double, boost::shared_ptr<Palier> >]"
    /usr/include/boost/shared_ptr.hpp:237: instantiated from «void boost::shared_ptr<T>::reset(Y*) [with Y = ListeTrieePalier, T = ListeTriee<double, boost::shared_ptr<Palier> >]"
    FlowshopPerfo/AtelierPerfo.cpp:315: instantiated from here
    FlowshopPerfo/../ClassesAnnexes/ListeTriee.tpp:83: erreur: type «class boost::shared_ptr<boost::shared_ptr<Palier> >" argument given to «delete", expected pointer
    FlowshopPerfo/../ClassesAnnexes/ListeTriee.tpp:85: erreur: type «class boost::shared_array<boost::shared_ptr<boost::shared_ptr<Palier> > >" argument given to «delete", expected pointer
    FlowshopPerfo/../ClassesAnnexes/ListeTriee.tpp:86: erreur: type «class boost::shared_array<double>" argument given to «delete", expected pointer
    make: *** [AtelierPerfo.o] Erreur 1
    *** Exited with status: 2 ***
    (Pour les erreurs qui suivent, ce n'est pas lié a priori, je les déboguerai après, ce n'est pas un problème)
    J'ai mis en rouge la ligne de la méthode qui pose problème.

    Ce qui me chagrine, c'est que l'appel à la méthode liste->Ajouter(...) me semble bien respecter la déclaration de la méthode :

    template <typename INDICE, typename TYPE>
    void ListeTriee<INDICE,TYPE>::Ajouter(INDICE Indice, boost::shared_ptr<TYPE> Element)


    Voilà, si vous avez quelques idées à ce propos...
    Merci,
    Le Barde.
    Hayiiiiiiiiiiiiii !

  2. #2
    screetch
    Invité(e)
    Par défaut
    Ta liste est une liste de pointeurs

    dans la methode ajouter tu veux ajouter un pointeur sur un pointeur

    donc il essaye de construire un shared_ptr< shared_ptr< T > >

    TYPE est deja un shared_ptr donc retire le second shared_ptr

  3. #3
    Membre actif
    Avatar de Le Barde
    Homme Profil pro
    Chanteur
    Inscrit en
    Juillet 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chanteur

    Informations forums :
    Inscription : Juillet 2007
    Messages : 343
    Points : 259
    Points
    259
    Par défaut
    Ah oui ! Vu, merci beaucoup !!
    J'encapsule trop

    Voilà, donc [RÉSOLU]

    Bonne journée et merci, screetch.
    Hayiiiiiiiiiiiiii !

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

Discussions similaires

  1. Problèmes avec les pointeurs
    Par dlaumor dans le forum C
    Réponses: 8
    Dernier message: 17/10/2007, 14h06
  2. Petit problème avec les pointeurs et variable
    Par mitherkiller dans le forum C
    Réponses: 5
    Dernier message: 09/03/2007, 22h05
  3. problème avec les pointeurs en c
    Par dialloma dans le forum C
    Réponses: 14
    Dernier message: 01/01/2007, 21h22
  4. probléme avec les pointeurs
    Par killer_instinct dans le forum C++
    Réponses: 6
    Dernier message: 11/12/2006, 11h37
  5. [TTreeView] Problème avec les pointeurs d'objet
    Par BlackWood dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/07/2004, 14h31

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