2017-04-18 13 views
0

私のクラスのためにC++のハッシュプログラムで作業していますね。私は私のヘッダーファイルのテンプレートTクラスを使用しています。クラスのコンストラクタをmainから呼び出そうとすると、宣言されていない識別子が与えられ、 'int'という予期しないエラーが発生します。ここに私のHashTable.hファイルは次のとおりです。宣言されていない識別子とタイプ 'int'メインからクラスを呼び出すときに予期しないエラーが発生しました

#pragma once 
#include "Record.h" 
#define MAXHASH 1000 
#ifndef HASHTABLE_H 
#define HASHTABLE_H 
using namespace std; 

template <class T> class HashTable 
{ 
public: 
    HashTable(); 
    ~HashTable(); 
    bool insert(int, T, int&); 
    bool remove(int); 
    bool find(int, T&); 
    float alpha(); 
private: 
    int key; 
    T value; 
}; 

#endif 

、ここでは私のメインです:

#include "HashTable.h" 
#include "stdafx.h" 
#include <string> 
#include <iostream> 
using namespace std; 

int main() 
{ 
    HashTable<int> *test = new HashTable<int>(); 
    return 0; 
} 

ここでも.cppファイル内のコンストラクタです:

#pragma once 
#include "stdafx.h" 
#include "HashTable.h" 
#include "Record.h" 
#define HASHTABLE_CPP 
#ifndef HASTABLE_CPP 


template <class T> 
HashTable<T>::HashTable() 
{ 
    Record hashArray = new Record[MAXHASH]; 
    for (int i = 0; i < MAXHASH; i++) 
    { 
     hashArray[i]->key = 0; 
     hashArray[i]->value = NULL; 
    } 
} 

固有のエラー私は、午前:

Error C2062 type 'int' unexpected identifier 

Error C2065 'HashTable': undeclared identifier  

両方の誤差は主に通話回線を指します。

このテストハッシュが機能するまで私のプログラムをテストすることができないので、難しいです。どのようにこの問題を解決するための入力は素晴らしいだろう!

+2

は 'typename T'を使用します –

+2

[this]の亜種ではありません(http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file)コンパイルするとすぐに実行されます。 – NathanOliver

+2

トピックに関して: 'HashTable * test = new HashTable ();'あなたがする必要がある場合を除いて新しいものではありません。 'HashTable test;'は、あなたが望むことを実行する可能性が最も高いでしょう。 'record hashArray = new Record [MAXHASH];に注意してください。' 'hashArray'はローカル変数であるため、関数が終了すると割り当てられた記憶領域がどこにあるのか分かりません。それをメンバ変数にすることを考えてください。以前と同じように、新しいものを避けてください。 – user4581301

答えて

0

事前にコンパイルされたヘッダーが使用されている場合は、古いMicrosoftアプリケーションファイル拡張インターフェイス "stdafx.h"が最初のディレクティブになります。それは実際にVSがそれを期待しているので最高の...私はいつもそれを使用します。

関連する問題