Salut à tous,
J'ai un problème pour déclarer une classe template. Ca, ça marche :
Mais dès que je veux rajouter un paramètre template, ça foire :
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
61
62
63
64 template < template <class ONP> class ObjectNeighborhoodPolicy = RectangleIntersectionNeighborhoodPolicy, class Nodes = Node_RectangleBiCircNeighborhoodProfiles, class Edges = Weight, class NodesContainer = boost::vecS, class EdgesContainer = boost::vecS > class MPP_Graph : public BGL_Graph<NodesContainer,EdgesContainer,boost::undirectedS,Nodes,Edges>, public ObjectNeighborhoodPolicy<Nodes> { public: /// Constructeur à partir d'un objet contenant les paramètres de l'algorithme et de l'affichage /// @param parameters Les paramètres de l'algorithme et de l'affichage MPP_Graph( const MPPParameters ¶meters ); /// Destructeur ~MPP_Graph() {}; /** * @name Méthodes pour l'affichage et sa gestion */ /*@{*/ /// Initialisation de l'affichage /// @param name Le nom de la fenêtre /// @param width La largeur de la fenêtre /// @param height La hauteur de la fenêtre void InitDisplay(std::string name = "MPP", unsigned int width = 200, unsigned int height = 200); /// Initialisation de l'affichage à partir d'un fichier XML /// @param XMLfilename Le nom du fichier XML void InitDisplayXML( const std::string &XMLfilename ); /// Affichage de la fenêtre et de ses différents éléments (encapsule la méthode Draw) /// @param flags Flags pour le choix de ce qu'il faut afficher /// \sa GraphDraw void Display( unsigned int flags = GraphDraw::eDRAW_ALL ); /*@}*/ /// Affichage du graphe /// @param flags Flags pour le choix de ce qu'il faut afficher /// \sa GraphDraw void Draw( unsigned int flags = GraphDraw::eDRAW_ALL); /// Calcul des voisinages dans le graphe void ComputeNeighborhoods(); protected: /// Les différents paramètres associés à l'algorithme et à l'affichage MPPParameters MPPParameters_; /// Flag indiquant si l'affichage a été initialisé bool is_display_init_; /// La fenêtre d'affichage du graphe IdFenetreCalques window_; /// Le calque contenant les rectangles IdCalqueVecteur layer_rectangle_; /// Le calque contenant les profiles IdCalqueVecteur layer_profiles_; /// Le calque contenant les voisinages IdCalqueVecteur layer_neighborhood_; /// Le calque contenant les arêtes (les relations de voisinage) IdCalqueVecteur layer_edges_; /// Le type du generateur de nombres aleatoires (GSL) const gsl_rng_type *GSL_RNG_TYPE_; /// Le generateur de nombres aleatoires (GSL) gsl_rng *GSL_RNG_; /// L'image sur laquelle on travaille boost::shared_ptr< TTImage <unsigned char> > image_; };
Les erreurs de Visual 2003 :
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
61
62
63
64
65 template < template <class ONP> class ObjectNeighborhoodPolicy = RectangleIntersectionNeighborhoodPolicy, class EnergyPolicy = int, class Nodes = Node_RectangleBiCircNeighborhoodProfiles, class Edges = Weight, class NodesContainer = boost::vecS, class EdgesContainer = boost::vecS > class MPP_Graph : public BGL_Graph<NodesContainer,EdgesContainer,boost::undirectedS,Nodes,Edges>, public ObjectNeighborhoodPolicy<Nodes> { public: /// Constructeur à partir d'un objet contenant les paramètres de l'algorithme et de l'affichage /// @param parameters Les paramètres de l'algorithme et de l'affichage MPP_Graph( const MPPParameters ¶meters ); /// Destructeur ~MPP_Graph() {}; /** * @name Méthodes pour l'affichage et sa gestion */ /*@{*/ /// Initialisation de l'affichage /// @param name Le nom de la fenêtre /// @param width La largeur de la fenêtre /// @param height La hauteur de la fenêtre void InitDisplay(std::string name = "MPP", unsigned int width = 200, unsigned int height = 200); /// Initialisation de l'affichage à partir d'un fichier XML /// @param XMLfilename Le nom du fichier XML void InitDisplayXML( const std::string &XMLfilename ); /// Affichage de la fenêtre et de ses différents éléments (encapsule la méthode Draw) /// @param flags Flags pour le choix de ce qu'il faut afficher /// \sa GraphDraw void Display( unsigned int flags = GraphDraw::eDRAW_ALL ); /*@}*/ /// Affichage du graphe /// @param flags Flags pour le choix de ce qu'il faut afficher /// \sa GraphDraw void Draw( unsigned int flags = GraphDraw::eDRAW_ALL); /// Calcul des voisinages dans le graphe void ComputeNeighborhoods(); protected: /// Les différents paramètres associés à l'algorithme et à l'affichage MPPParameters MPPParameters_; /// Flag indiquant si l'affichage a été initialisé bool is_display_init_; /// La fenêtre d'affichage du graphe IdFenetreCalques window_; /// Le calque contenant les rectangles IdCalqueVecteur layer_rectangle_; /// Le calque contenant les profiles IdCalqueVecteur layer_profiles_; /// Le calque contenant les voisinages IdCalqueVecteur layer_neighborhood_; /// Le calque contenant les arêtes (les relations de voisinage) IdCalqueVecteur layer_edges_; /// Le type du generateur de nombres aleatoires (GSL) const gsl_rng_type *GSL_RNG_TYPE_; /// Le generateur de nombres aleatoires (GSL) gsl_rng *GSL_RNG_; /// L'image sur laquelle on travaille boost::shared_ptr< TTImage <unsigned char> > image_; };
Au cas où, je mets la classe de base :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 E:\MATIS\Codes\MATIS_DEV\include\structures\rjmcmc_graph_struct.hpp(156) : error C2977: 'MPP_Graph' : nombre d'arguments de modèle trop élevé E:\MATIS\Codes\MATIS_DEV\include\structures\rjmcmc_graph_struct.hpp(156) : voir la déclaration de 'MPP_Graph' E:\librairies\CGAL-3.3.1\include\CGAL\Root_of_traits.h(95) : voir la référence à l'instanciation du modèle de classe 'CGAL::CGALi::Root_of_traits_helper<FT,CGAL::Field_tag>' en cours de compilation E:\MATIS\Codes\MATIS_DEV\include\structures\rjmcmc_graph_struct.hpp(177) : error C2504: 'MPP_Graph' : classe de base non définie E:\MATIS\Codes\MATIS_DEV\include\structures\rjmcmc_graph_struct.hpp(202) : voir la référence à l'instanciation du modèle de classe 'MPP_Rectangle_Graph<ObjectNeighborhoodPolicy,Nodes,Edges,NodesContainer,EdgesContainer>' en cours de compilation e:\MATIS\Codes\MATIS_DEV\include\structures\rjmcmc_graph_struct.inl(26) : error C2955: 'MPP_Graph' : l'utilisation d'un modèle de classe nécessite une liste d'arguments de modèle E:\MATIS\Codes\MATIS_DEV\include\structures\rjmcmc_graph_struct.hpp(156) : voir la déclaration de 'MPP_Graph' e:\MATIS\Codes\MATIS_DEV\include\structures\rjmcmc_graph_struct.inl(26) : error C2039: '__ctor' : n'est pas membre de 'MPP_Graph' E:\MATIS\Codes\MATIS_DEV\include\structures\rjmcmc_graph_struct.hpp(156) : voir la déclaration de 'MPP_Graph' // ... // ...
Je ne comprends pas ce message :
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 template <class NodesContainer = boost::vecS, class EdgesContainer = boost::vecS, class Directed = boost::undirectedS, class NodesAttributes = boost::no_property, class EdgesAttributes = boost::no_property > class BGL_Graph : public boost::adjacency_list<NodesContainer, EdgesContainer, Directed, NodesAttributes, EdgesAttributes > { public: BGL_Graph() {}; ~BGL_Graph() {}; // Après, il n'y a que des typedefs .. };
Quel est le problème ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part error C2977: 'MPP_Graph' : nombre d'arguments de modèle trop élevé
D'avance merci
Partager