создание экземпляра — в C ++ возникла ошибка с помощью std :: set

Я нашел кучу сообщений о проблеме «отсюда». Все они казались людьми, которые создали забытый конструктор по умолчанию. Я думаю, что моя проблема в другом (однако я новичок в 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]

Любая помощь всегда ценится.

0

Решение

Где-то что-то пытается сравнить const Node с const Node, Как твой operator< не отмечен constэто не удается.

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

Стандартная библиотека ожидает, что сравнения будут логически const, Если они действительно не могут быть constиспользовать mutable чтобы скрыть, что оператор выполняет мутацию, но убедитесь, что это действительно не видно снаружи.

На сообщение об ошибке: instantiated from here на самом деле просто означает, что этот фрагмент кода отвечает за создание шаблона, в котором происходит ошибка. Это не настоящая ошибка, а часть следа реализации. реальный ошибка обычно (в gcc) содержится после слова errorКак бы это ни звучало.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]