C ++中的模板化类

时间:2012-09-27 06:02:23

标签: c++ templates vector

以下是我的代码。我正在使用GNU G ++编译器。我收到错误“main.cpp:在函数'int main()': main.cpp:12:9:错误:'class hash'没有名为'printVectorContents'的成员“

我知道我忽略了一些愚蠢的东西我无法用手指指着它。有帮助吗?

int main()
{
    std::cout << "Yeah you did dat"<<std::endl;
    hash<int> newHash;
    newHash.printVectorContents();
    std::cin.get();
    return 0;
}

和我模板化的课程......

template <class dataTypeClass> class hash{
private:
    std::vector <dataTypeClass> hashVector;
    std::string mName;
public:
    hash(){}
    hash(std::string aName = "unnamedHash"):mName(aName),hashVector(100,NULL){}
    ~hash(){std::cout<<"Hash "<<mName<<"destructing!";}
    void addHashItem(dataTypeClass aHashItem, std::string akey){}
    int hashFunction(dataTypeClass hashItem){return 0;}
    void printVectorContents()
    {
        for (typename std::vector<dataTypeClass>::iterator i = hashVector.begin(); i<hashVector.rend(); i++)
        {
            std::cout<< *i << std::endl;
        }
    }
};

1 个答案:

答案 0 :(得分:5)

  1. hash是一个通用名称,将其设为myhash等,或将其放入自己的命名空间以避免名称冲突。

  2. 删除hash(){}。你有一个构造函数已经采用了一个默认参数,当你声明hash<int> myhash;时,它不知道要调用哪个构造函数。

  3. i<hashVector.rend()更改为i != hashVector.end()

  4. hashVector(100,NULL)更改为hashVector(100)