Я делаю хэш-таблицу, и мой класс HashTable состоит из следующей структуры и следующая функция в моем файле заголовка:C++ вне строки определения
class HashT
{
public:
struct Node
{
std::string key;
std::string value;
Node* next;
};
Node** HashTArray;
void HashTCopy(struct Node** h1, struct Node** h2, unsigned int sz);
HashT(const HashT& hm); (copy constructor that calls HashTCopy)
unsigned int initialBucketCount = 10;
};
В моем исходном файле, я определить функции как таковой, и использовал его в моем конструктор копирования:
void HashT::HashTCopy(struct Node** h1, Node** h2, unsigned int sz)
{
...
}
HashT::HashT(const HashT& hm)
{
new_HashT = new Node* [hm.initialBucketCount];
HashTCopy(new_HashT, hm.HashTArray, hm.initialBucketCount)
}
Когда я пытаюсь скомпилировать это я получаю сообщение об ошибке говорящее out-of-line definition HashT::HashTCopy..."
и .... note: type of 1st parameter of member declaration does not match definition. 'struct Node**' aka 'HashMap::Node** vs 'struct Node** aka HashMap::Node**'
. Компилятор указывает на struct
... 'void HashTCopy (struct Узел ** h1, ....) `. Я не могу понять проблему. Моя декларация и определение совпадают, так что в этом проблема? Благодаря
Показать ** все ** ваш код, [потому что это отлично работает для меня] (http://ideone.com/MRwYvB) – Cornstalks
сделаю. Добавлен в конструктор копирования, который вызывает эту функцию. – Steven
Почему вы не определяете реализацию для использования 'HashT :: Node' (вместо' struct Node')? – Cornstalks