const: problem bei iteratoren als parameter



  • Hallo,

    Ich habe folgendes problem.

    Ich habe folgende datanstructur (vereinfacht):

    class connection_set{
    private:
       struct connection_node{
             connection_node(const unsigned long id,const node_type_t t):id_(id),type_(t){}
             unsigned long node_id_;
             node_type_t type_;
             std::set<connection_node> descending_nodes_;
       };
    public: 
         typedef std::set<connection_node>::iterator set_iter;
         set_iter add(const unsigned long id,const node_type_t t);
         set_iter add(const unsigned long id,const node_type_t t,set_iter element);   
         //.....
    };
    

    Es geht jetzt um die implementierung des zweiten add.
    Ich möchte ein element in das set auf das der iterator zeigt einfügen.

    connection_set::set_iter connection_set::add(const unsigned long id, const node_type_t t,connection_set::set_iter element){
              //... einige tests
              std::pair<std::set<connection_node>::iterator,bool> result_;
              result_=element->descending_nodes_->insert(connection_node(id,t)); //<-- funktioniert nicht wegen constness von descending_nodes_ ????
    }
    

    Der compiler meckert das descending_nodes_ constant ist. Obwohl es das doch eigentlich nicht sein sollte.
    Als wie schaff ich es dass das funktioniert ? Ich hab ne dreckige Lösung aber es muss doch auch anders gehen.

    (dreckige lösung)

    //--- snip
    std::set<connection_node> *nodeptr=const_cast< std::set<connection_node>* >(&element->descending_nodes_);
    nodeptr->insert(connection_node(id,t));
    //--- snap
    

    Ich versteh nicht warum descending_nodes_ constant ist.


Anmelden zum Antworten