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 回答