Re-bonjour à toutes et à tous !
Je fais passer un visiteur sur tous les noeuds d'un arbre en utilisant une fonction de parcours. Mon mon grand ami compilateur n'aime pas du tout le code suivant :
Il me dit que :
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 template <typename Visitor, typename T> Visitor& pre_order_DFS(Visitor& v, Node<T> const& node){ v.visit(node) // ... return v; } template <typename Visitor, typename T> Visitor& pre_order_DFS(Visitor& v, Node<T> & node){ v.visit(node) // ... return v; } template<typename Node> class AllelicStateInheritance{ public: void visit(Node & node) { // ... } }
Ce que j'ai traduit par "désolé mon grand, j'arrive pas à envoyer une référence non constante dans la version non constante de la fonction de parcours".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 traversal.h:57:2: error: binding const Node<traversal::CoalescentToDatasetConnector<Coords, unsigned int, genet::Marker_Descriptor<unsigned int> > > to reference of type Node<traversal::CoalescentToDatasetConnector<Coords, unsigned int, genet::Marker_Descriptor<unsigned int> > >& discards qualifiers v.visit(node); ^ traversal.h:301:7: note: initializing argument 1 of void traversal::AllelicStateInheritance<Node>::visit(Node&) [with Node = Node<traversal::CoalescentToDatasetConnector<Coords, unsigned int, genet::Marker_Descriptor<unsigned int> > >]
Est-ce que j'ai juste dans la traduction ? Si oui, quelqu'un pourrait m'aiguiller vers la solution technique adaptée ?
Merci à vous !
PS : j'ai trouvé ça, c'est adapté ? Evidemment j'ai pour l'instant rien compris, je me renseigne...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 template <typename Visitor, typename T> typename std::enable_if< std::is_same<Aggregate, typename std::remove_const<T>::type >::value >::type visit( Visitor & v, T & s ) { // T can only be Aggregate or Aggregate const v(s.i); v(s.d); }
Partager