我試圖訪問我的Node結構中的edges_,所以我可以做一個for-loop將邊緣複製到我的拷貝構造函數的新圖對象中。新圖的深拷貝構造函數
我收到以下錯誤,當我嘗試訪問節點中的edges_時,我感到困惑。
tests/Graph.tem:280:24: error: ‘struct std::pair<const std::__cxx11::basic_string<char>, std::shared_ptr<gdwg::Graph<std::__cxx11::basic_string<char>, int>::Node> >’ has no member named ‘edges_’
for (auto edge: node.edges_) {
~~~~~^~~~~~
我試圖做一個拷貝構造函數,深拷貝到一個新的圖形對象的圖形中的節點和邊緣:
template <typename N, typename E>
Graph<N, E>::Graph(const Graph &g):
nodes_{g.nodes_}
{
for (auto node: g.nodes_) {
for (auto edge: node.edges_) {
}
}
}
以下是我的Graph類:
template <typename N, typename E> class Graph {
private:
struct Node;
struct Edge;
struct Node {
N val_;
int numEdges_;
int numIncomingEdges_;
std::set<std::shared_ptr<Edge>> edges_;
std::set<std::shared_ptr<Edge>> incomingEdges_;
Node() {}
Node(const N x) : val_{x} { numEdges_=0; numIncomingEdges_=0; }
void printNode(N n);
~Node();
void update();
};
struct Edge {
std::weak_ptr<Node> orig;
std::weak_ptr<Node> dest;
E val_;
Edge(std::shared_ptr<Node> o, std::shared_ptr<Node> d, E x);
Edge() {};
void printEdge();
~Edge();
};
首先,如何訪問它以執行深度複製?似乎有一些ptr問題。其次,是否有一種簡單的方法可以深入複製存儲在節點中的邊緣?
什麼是Graph :: nodes_'的類型?如果它是'std :: map>',如你的錯誤消息所示,'node'具有類型'std :: pair > ',所以而不是'node.edges_',你應該使用'node.second-> edges_'。 –
Franck
std :: map> nodes_; –
iteong
因此,對於第一個問題,您應該用'for(auto edge:node.second-> edges_)'替換'for(auto edge:node.edges_)'。 – Franck