я получил следующую ошибкуВозврат значения из карты, соответствующего типа возвращаемого значения
In file included from /Users/james/ClionProjects/United States Computing Olympiad/graphs.cpp:2:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:439:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/algorithm:628:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory:1673:31: error: no matching constructor for initialization of 'Vertex'
::new((void*)__p) _Up(_VSTD::forward<_Args>(__args)...);
А вот сокращенный вариант соответствующей части моего кода:
class Vertex {
public:
int label;
vector<Vertex> adjacent_vertices;
Vertex(const int l) : label(l) { }
Vertex(const int l, vector<Vertex> adjacents) : label(l), adjacent_vertices(adjacents) { }
Vertex(const Vertex& other_vertex) : label(other_vertex.label), adjacent_vertices(other_vertex.adjacent_vertices){ }
};
class Graph {
public:
unordered_map<int, Vertex> vertices;
protected:
Vertex getmake_vertex(const int v) {
if (vertices.find(v) == vertices.end()) {
// not found, make new vertex
vertices[v] = Vertex(v);
}
return vertices[v];
};
};
I подтвердили, что выполнение этого с учетом всего остального вызывает ошибку компилятора. Может кто-нибудь объяснить мне, почему это происходит и как я могу это исправить? Here - это совокупность с полным выходом компилятора.
Метод предназначен для создания вершины, если она еще не существует, а затем возвращает ее. И так как каждой вершине нужна метка, как мне создать конструктор по умолчанию? –
Это действительно то, как вы это делаете, если ваш класс не имеет по умолчанию c'tor – haavee
Да, это нормально. Вы все еще держите его внутри своего 'if (vertices.find (v) ...)' block – xaxxon