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
    47263262181824

    Weiss jemand, wie so etwas zustande kommen kann?


  • Mod

    Ohne vollständige Definitionen kann man nur Vermutungen anstellen; die Signatur des Vergleichsoperators suggeriert, dass ein fehlerhafter Copy-ctor/Destruktur vorliegt.


Anmelden zum Antworten