У меня возникла проблема с созданием объекта класса из класса шаблона, в котором мне нужен конструктор, который также должен быть шаблоном и принимать параметр при создании объекта. Однако, когда я пытаюсь создать объект, я получаю сообщение об ошибке, в котором говорится, что я ссылаюсь на то, что не существует.Создание объекта класса шаблона с использованием конструктора шаблона
Вот мой код:
using namespace std;
#include <cstdlib>
template <class Node_Type>
class BinaryTree
{
public:
BinaryTree(Node_Type);
BinaryTree(Node_Type, Node_Type);
BinaryTree(Node_Type, Node_Type, Node_Type);
bool isEmpty();
Node_Type info();
Node_Type inOrder();
Node_Type preOrder();
Node_Type postOrder();
private:
struct Tree_Node
{
Node_Type Node_Info;
BinaryTree<Node_Type> *left;
BinaryTree<Node_Type> *right;
};
Tree_Node *root;
};
#endif
и мой .cpp:
template <class Node_Type>
BinaryTree<Node_Type>::BinaryTree(Node_Type rootNode) {
root = rootNode;
root->left = NULL;
root->right = NULL;
}
Там больше к .cpp, но это просто другие члены функции, которые не имеют значения. Мой конструктор, показанный выше, я не могу заставить работать.
В моей основной, я пытаюсь объявить свой объект с вызовом:
BinaryTree<char> node('a');
, но когда я пытаюсь это, я получаю сообщение об ошибке:
undefined reference to `BinaryTree<char>::BinaryTree(char)'
Я пытался понять это уже два дня. Я искал каждую тему, о которой я могу думать, и читаю бесчисленные примеры в Stack Overflow и других источниках без какой-либо помощи. Может кто-нибудь объяснить, что моя проблема? Я знаю, как сделать свой проект, и я бы закончил, если бы синтаксис не был настолько смешным в C++. Заранее спасибо!
Ответ на вашу проблему - это именно то, о чем компилятор вам говорит. 'Tree_Node *' is * not * a 'char'. – WhozCraig
Короткий и неточный: потому что у вас есть тело вашей функции, которое зависит от шаблона внутри файла '.cpp'. Он должен быть с вашим файлом '.h' либо непосредственно в вашем определении класса, либо если вам не нравится размещать его там, потому что для его упрощения читать, объявлять функцию как' inline' и перемещать ее за пределы класса определение, либо в том же файле, либо в '.hpp', который вы включаете в' .h' –
@WhozCraig является правильным 'root' имеет тип' Tree_Node * 'не' char' – loki