2012-09-27 42 views
0

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

我知道我在俯瞰有些愚蠢我不能把手指放在它上面。任何帮助?

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; 
     } 
    } 
}; 
+3

有没有可能'hash '是指'std :: hash '而不是你的班级模板?由于您显然没有展示完整的翻译单元,因此很难说出您翻译单元中的内容。 –

+1

你使用什么编译器?看起来,它看起来像19xx年的Borland Turbo C++ 3.0。你的代码还有其他一些由现代编译器发现的错误。 – Torsten

+1

你确定你没有在printVectorContents()中出错吗?例如。在“i

回答

5
  1. hash一个共同的名字,让它myhash等,或将其放入自己的命名空间,以避免名称冲突。

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

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

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

+1

@EmilioGaravaglia:谢谢,编辑。 –

+0

这些都是我需要改变的东西,谢谢。虽然他们没有解决我最初的错误。我开始意识到我有一个头文件和一个模板类的cpp文件,这是错误的。这是我的大部分问题。 http://bit.ly/UNpwY9我从C#开始回到C++一段时间,我有点冒险尝试一次做太多事情。 –