Я новичок в C ++ и пытаюсь кодировать структуру данных HashTable.
Я написал его как универсальный с использованием шаблонов, и я включил в него объект HashEntry для упрощения квадратичного зондирования столкновений.
Код у меня есть:
(в файле .C, который # включает приведенное ниже определение класса .H файла):
HashEntry::HashEntry()
{
this->isActive = false;
}
И связанный файл .H с определениями классов:
#include <iostream>
#include <string>
#include "Entry.C"
using namespace std;
#define Default_Size 50000
class HashEntry;
template <class T> class HashTable
{
private:
int size;
int occupied;
T array[Default_Size];
public:
HashTable();
int Size();
void Add(T t);
void DebugAdd(T t, int index);
T* Get(string index);
/* How do I declare the existence of HashEntry BEFORE here? */
int FindNextOpen(HashEntry he); // Only works for hash_entry objects!
int Hash(string str);
void Rehash();
};
class HashEntry
{
private:
Entry e;
bool isActive;
public:
HashEntry();
HashEntry(Entry e);
bool IsActive();
Entry GetEntry();
};
Всякий раз, когда я пытаюсь скомпилировать все, я получаю сообщение об ошибке для конструктора HashEntry выше:
msgstr "нет подходящей функции для вызова Entry :: Entry ()" ... "кандидатами являются .....".
Я понятия не имею, что это значит - когда я пытаюсь включить конструктор Entry () по умолчанию (моя первая интерпретация), он выдает больше ошибок.
Спасибо за помощь!
ОБНОВЛЕНИЕ - ENTRY.C:
#include "Entry.H"
/* ***Entry Methods*** */
/*
* Overloaded Entry obejct constructor that provides a string value.
*/
Entry::Entry(string s)
{
this->value = s;
this->count = 0;
}
/*
* Returns the number of times this Entry has been accessed/
* found.
*/
int Entry::Count()
{ return this->count; }
/*
* Returns the string value stored in the Entry object.
*/
string Entry::Value()
{ return this->value; }