0

我正在尝试从静态函数 Initialize() 访问非静态成员 HashTable

这就是我的代码的样子。运行此程序时出现以下错误

“未定义对 `Hash::HashTable' 的引用” 有什么方法可以访问是从 Initialize 与 HashTable 的相同定义。


class Hash
{

private:
  static const int tableSize = 10;
  struct item
  {
       string name;
       item* next;
  };
  static item* HashTable[tableSize];
public:
  static void Initialize();
  static int Hash(string key);

};
----------------------------------------------------------------------------



--------------------------------hash.cpp------------------------------------

#include<iostream>
#include<string>
#include "hash.hpp"

using namespace std;


hash::Initialize()
{
      for(int i=0;i<tableSize;i++)
      {
            HashTable[i] =  new item; //Gives an error
            HashTable[i]->name = "empty";//Gives an error
            HashTable[i]->next = NULL;
      }
}

int hash::Hash(string key)
{
    int hash=0;
    int index=0;
    for(int i=0;i<key.length();i++)
    {
           hash = (hash + (int)key[i]);
    }
    index = hash % tableSize;
    cout<<"Index-"<<index<<endl;
    return index;

}



int main(int argc,char** argv)
{
    Hash:Initialize();
    Hash::PrintTable();
    return 0;
}

4

1 回答 1

2

这是链接器报告的错误,而不是编译器。您忘记在代码中提供定义HashTable。要修复,请添加

hash::item* hash::HashTable[hash::tableSize];

hash.cpp.

于 2013-10-29T18:37:06.780 回答