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)
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 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); }
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
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
(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)
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 ***
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.
Partager