Я нашел кучу сообщений о проблеме «отсюда». Все они казались людьми, которые создали забытый конструктор по умолчанию. Я думаю, что моя проблема в другом (однако я новичок в 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]
Любая помощь всегда ценится.
Где-то что-то пытается сравнить const Node
с const Node
, Как твой operator<
не отмечен const
это не удается.
operator<(const Node& other) const {}
^^^^^
Стандартная библиотека ожидает, что сравнения будут логически const
, Если они действительно не могут быть const
использовать mutable
чтобы скрыть, что оператор выполняет мутацию, но убедитесь, что это действительно не видно снаружи.
На сообщение об ошибке: instantiated from here
на самом деле просто означает, что этот фрагмент кода отвечает за создание шаблона, в котором происходит ошибка. Это не настоящая ошибка, а часть следа реализации. реальный ошибка обычно (в gcc) содержится после слова error
Как бы это ни звучало.
Других решений пока нет …