获取错误:在'('标记之前)丢失模板参数

时间:2014-01-15 13:20:10

标签: c++

作为家庭作业我们需要建立一个通用地图,该地图将与给定的不可修改的代码一起使用:

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);

我该如何解决? (我只能更改我的代码)

1 个答案:

答案 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());
        }
    }
};