我正在尝试构建模板函数。使用内部模板化类,我想将函数的模板类型传递给这些类。所以我有:
template <class T>
T find_bottleneck (ListGraph &g, CrossRefMap<ListGraph, Edge, T> &weight, Node &s, Node &t) {
// Check if theres a single edge left
if (countEdges(g) == 1) {
CrossRefMap<ListGraph, Edge, T>::ValueIt itr = weight.beginValue();
return *itr;
}
然而,这失败了,引用
lemon_graph.cpp: In function ‘T find_bottleneck(lemon::ListGraph&, lemon::CrossRefMap<lemon::ListGraph, lemon::ListGraphBase::Edge, T>&, Node&, Node&)’:
lemon_graph.cpp:20: error: expected ‘;’ before ‘itr’
lemon_graph.cpp:21: error: ‘itr’ was not declared in this scope
我尝试使用一个函数的简单示例重新创建它,该函数根据传递给它的类型生成向量并且编译得很好,所以我不确定这里的问题是什么。
答案 0 :(得分:4)
缺少typename
。
typename CrossRefMap<ListGraph, Edge, T>::ValueIt
typename
是所有C ++中至少50%的答案 - 与模板相关的问题:-)它告诉编译器,无论模板参数如何,后面的内容总是一个类型(ValueIt
例如,对于迭代器,可以是int
而不是typedef
。