3
#include <iostream>
#include <map>
#include <string>

using namespace std;

template <class T>
class Counter
{
    public:
        Counter()
        {
            totalCount     
        }

        ~Counter()
        {
        }

        bool containsKey(T key)
        {
            map<T, double>::iterator it = counter.find(T);
            if (it == counter.end()) return false;
            return true;
        }

    private:
        map<T, double> counter;
        double totalCount;
};

int main()
{
    Counter<string> table;
    return 0;
}

这段代码甚至没有编译,我不知道是什么错误。任何帮助,将不胜感激。谢谢!

cmd编译

g++ counter.cpp

错误是

error: need ‘typename’ before ‘std::map<T, double>::iterator’ because ‘std::map<T, double>’ is a dependent scope
4

1 回答 1

6

编译器知道 T 是模板声明中的类型名称(typename),但它不知道 std::map::iterator 是类型还是不同的东西。因此,正如编译器所说,您必须在此语句之前添加“typename”以告诉编译器它是一种类型的名称。

总结:改变

map<T, double>::iterator it = counter.find(T);

typename map<T, double>::iterator it = counter.find(T);
于 2013-06-20T20:55:12.457 回答