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.