简体   繁体   English

C ++中的模板化类

[英]Templated classes in C++

Below is my code. 下面是我的代码。 I am using the GNU G++ compiler. 我正在使用GNU G ++编译器。 I am getting error "main.cpp: In function 'int main()': main.cpp:12:9: error: 'class hash' has no member named 'printVectorContents'" 我收到错误“ main.cpp:在函数'int main()'中:main.cpp:12:9:错误:'类哈希'没有名为'printVectorContents'的成员”

I know I am overlooking something stupid I just can't put my finger on it. 我知道我忽略了一些愚蠢的事情,只是无法将手指放在上面。 Any help? 有什么帮助吗?

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

and my templated class... 还有我的模板类

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. hash is a common name, make it myhash , etc. or place it into its own namespace to avoid name clashes. hash是一个通用名称,可以将其命名为myhash等,也可以将其放置在自己的名称空间中以避免名称冲突。

  2. Remove hash(){} . 删除hash(){} You have a constructor taking a default parameter already, when you declare hash<int> myhash; 当您声明hash<int> myhash;时,已经有一个采用默认参数的构造函数hash<int> myhash; , it doesn't know which constructor to call. ,它不知道要调用哪个构造函数。

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM