我正在尝试用 C++ 实现 Graph。
我定义了一个类 Edge
以节点名称和权重作为 2 个参数。
还有一类Graph
,当我试图在 Graph 声明中将 Edge 作为模板参数传递时 Graph<int,Edge> g
,我得到一个错误。
我不能将类作为模板参数传递吗?我是 C++ 编码的新手,所以请原谅我的愚蠢行为。任何人都可以建议正确的方法吗?
template<class T1,class T2>
class Edge{
T1 d_vertex;
T2 d_weight;
public:
Edge(T1,T2);
T1 vertex();
T2 weight();
};
template<class T1,class T2>
Edge<T1,T2>::Edge(T1 v,T2 w):d_vertex(v),d_weight(w){
}
template<class T1,class T2>
T1 Edge<T1,T2>:: vertex(){
return d_vertex;
}
template<class T1,class T2>
T2 Edge<T1,T2>::weight(){
return d_weight;
}
template<class T,class T2>
class Graph{
vector<pair<T, list<T2> > > node;
};
int main()
{
Graph<int,Edge> g;
}
最佳答案
在这个实例化中
Graph<int,Edge> g;
Edge
仍然是一个类模板。这意味着您的 Graph
类应该是这样的
template<class T, template<class,class> class T2>
class Graph{ /**/ };
即具有模板模板参数或您应该指定Edge
的类型,例如
Graph<int, Edge<int,int>> g;
关于c++ - 将用户定义的类作为模板参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24423953/