Mysteriöse Datenveränderung durch Verwendung von Template-Operator
-
Hallo,
ich habe ein Klassentemplate
template<class N, class C> class Base_Tree { ... N* m_first_node; public: ... void calc_prior_prob_a(C* start); N* first_node() const { return m_first_node; } C* first_node_contnr() const { return m_first_node ? m_first_node->node_container() : 0; } // node_container() ist ein Member von N };und eine Templateklasse
class Tree : public Base_Tree<Node, Node_Container> { ... }wobei
template<class N, class C, class T> class Base_Node; class Node : public Base_Node<Node, Node_Container, Tree>;und
template<class N, class C, class T> class Base_Node_Container { ... bool operator==(C c) const { return true; } } class Node_Container : public Base_Node_Container<Node, Node_Container, Tree>; { ... //bool operator==(C c) hier nicht überladen }Rufe ich nun eine Instanz (N = Node, C = Node_Container) von
template<class N, class C> void Base_Tree<N, C>::calc_prior_prob_a(C* start) { ... cout << first_node()->id() << endl; // id() ist ein Member von N *start == *first_node_contnr(); cout << first_node()->id() << endl; ... }auf, so erhalte ich die Ausgabe
0
47263262181824Weiss jemand, wie so etwas zustande kommen kann?
-
Ohne vollständige Definitionen kann man nur Vermutungen anstellen; die Signatur des Vergleichsoperators suggeriert, dass ein fehlerhafter Copy-ctor/Destruktur vorliegt.