Я пытаюсь понять, как в том числе работает в C++
.У меня есть два вопроса по этому поводу.Первый - о том, как правильно импортировать файл .h
.Например, я создал следующий HashNode.h
файл:
namespace HashNode{
template<class Data>
class HashNode{
private:
Data data;
HashNode *next;
public:
explicit HashNode(const Data &data);
Data getKey();
~Node();
};
}
Итак, в файле HashNode.cpp
он должен выглядеть так:
#include "HashNode.h"
using namespace HashNode;
template <class Data> // ~~~ HERE 1 ~~~
HashNode::HashNode(const Data &data) {//todo};
template <class Data> // ~~~ HERE 2 ~~~
Data* HashNode::getKey() {
//todo
}
HashNode::~Node() {
//todo
}
Таким образом, он работает, но должен ли явключать template <class Data>
рядом с каждой функцией, которая использует Data
?Почему он не распознает Data
без включения template <class Data>
?
Также я создал файл Hash.h
, который должен использовать файл HashNode.h
:
#include "HashNode.h"
using namespace HashNode;
namespace Hash {
template <class Data>
class Hash {
typedef enum {
GOOD = 0,
BAD = -1,
BAD_ALLOC = -2
} Status;
private:
HashNode **hash;
int capacity;
int size;
public:
explicit Hash(int size);
Status insertData(const Data &data);
~Hash();
};
}
Но я получаюследующая ошибка: Can't resolve type 'HashNode'
.Почему он не видит импорт?В файле Hash.cpp
я получаю Unused import statement
для #include "HashNode.h"
.Это почему?Кроме того, что, если я хочу включить частные функции - они должны быть в файле .h
или в файле .cpp
?