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 :

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) {
              // ...
        }
}
Il me dit que :
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> > >]
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".
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);   
}