作为家庭作业我们需要建立一个通用地图,该地图将与给定的不可修改的代码一起使用:
class startsWith {
char val;
public:
startsWith(char v) : val(v) {};
bool operator()(const std::string& str) {
return str.length() && char(str[0]) == val;
}
};
void addThree(int& n) {
n += 3;
}
int main() {
Map<std::string, int> msi;
msi.insert("Alice", 5);
msi.insert("Bob", 8);
msi.insert("Charlie", 0);
// add To every name with B 3 points, using MapIf
startsWith startWithB('B');
MapIf(msi, startWithB, addThree);
}
我写道:
template<typename T, typename S, typename Criteria, typename Action>
class MapIf {
public:
void operator() (Map<T,S>& map, Criteria criteria, Action act) {
for (typename Map<T, S>::iterator iter = map.begin(); iter != map.end(); ++iter) {
if (criteria(((*iter).retKey()))) {
act(((*iter).retData()));
}
}
}
};
我收到了错误
Description Resource Path Location Type
missing template arguments before '(' token main.cpp /ex4 line 46 C/C++ Problem
在给定代码中(在MapIf(msi, startWithB, addThree);
)
我该如何解决? (我只能更改我的代码)
答案 0 :(得分:3)
看起来MapIf
应该是一个函数,而不是一个类:
template<typename T, typename S, typename Criteria, typename Action>
void MapIf(Map<T, S>& map, Criteria criteria, Action act)
{
for (typename Map<T, S>::iterator iter = map.begin(); iter != map.end(); ++iter) {
if (criteria(iter->retKey())) {
act(iter->retData());
}
}
};