0

「ここからインスタンス化された」問題に関するスレッドがたくさん見つかりました。彼らはすべて、デフォルトのコンストラクタを忘れて作成した人々のようでした。私の問題は違うと思います (ただし、私は C++ に不慣れで、同じ問題のわずかなバリエーションである可能性があり、解決策を実装する方法がわかりません)。

セットに挿入しようとしていますが、そこからインスタンス化されているようです。そして、それはエラーを投げています。

class Node{
public:
bool operator <(const Node& other){
    return id < other.id;
}
class Graph {
public:
    int poner;
    map<string, Node> nodeMap;
    set<Node> reachables;


    void DepthFirstSearch(Node node){
        reachables.clear(); //fine at this point
        poner = 0;
        DFS(node);
    }


    private:
        void DFS(Node node){
            reachables.insert(node); //instantiated from here
        }

    };


Node.h:131:25: instantiated from here
c:\..... errir: passing 'const Node' as 'this' argument of 'bool Node::operator<(const Node&)' discards qualifiers [-fpermissive]

どんな助けでも大歓迎です。

4

1 に答える 1

1

どこかで aconst Nodeと aを比較しようとするものがありconst Nodeます。あなたoperator<はマークされていないのでconst、これは失敗します。

operator<(const Node& other) const {}
                             ^^^^^ 

標準ライブラリは、比較が論理的に行われることを期待していますconst。本当にできない場合は、オペレーターがミューテーションを行っていることを隠すためconstに使用しますmutableが、これが実際に外部から見えないようにしてください。

エラーメッセージについて:instantiated from here実際には、このコードがエラーが発生したテンプレートのインスタンス化を担当していることを意味します。これは実際のエラーではなく、インスタンス化のバックトレースの一部です。本当のエラーは通常 (gcc では) 単語の後に含まれてerrorいます。

于 2012-11-27T17:11:54.387 に答える