我正在尝试编写一个邻接列表来保存图形。
这是我的代码,该类Graph有一个名为Node. 可以保存任何类型的Node消息,并为他们节省许多孩子的费用。
之后Node是nodes成员将所有节点保存在图中。
template<typename T>
class Graph {
public:
struct Node {
using Ptr = std::shared_ptr<Node>;
T val;
std::vector<std::pair<Ptr, int>> children;
Node() {}
Node(T data) : val(data) , children() {}
};
typename std::vector<Graph<T>::Node::Ptr> nodes;
Graph(){}
Graph(size_t n) : nodes(n) {
for(auto node : nodes)
node = std::make_shared<Node>();
}
};
问题
typename std::vector<Graph<T>::Node::Ptr> nodes;
我的编译器认为Ptr不是有效类型,这是错误
type/value mismatch at argument 1 in template parameter list for ‘template<class _Tp, class _Alloc> class std::vector’
我可以把声明放在Node外面,Graph做成一个模板来解决这个问题,但是为什么不能呢?
系统信息
- Ubuntu 20.04 (WSL2)
- g++ (Ubuntu 9.3.0-10ubuntu2) 9.3.0
已阅读