I'm having trouble creating a class object from a template class in which I need the constructor to also be a template and accept a parameter when the object is created. However, when I attempt to create the object, I receive an error message stating that I'm referencing something that doesn't exist.
Here's my code:
using namespace std;
#include
template
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 *left;
BinaryTree *right;
};
Tree_Node *root;
};
#endif
and my .cpp:
template
BinaryTree::BinaryTree(Node_Type rootNode) {
root = rootNode;
root->left = NULL;
root->right = NULL;
}
There's more to the .cpp, but it's just other function members that are irrelevant. My constructor shown above is what I can't get to work.
In my main, I'm attempting to declare my object with the call:
BinaryTree node('a');
but when I try this, I get an error message stating:
undefined reference to `BinaryTree::BinaryTree(char)'
I've been trying to figure this out for two days now. I've Googled every topic I can think of and read countless examples on and other sources with no help. Can anyone please explain what my problem is? I know how to do my project, and I'd be finished by now if the syntax wasn't so ridiculous in C++. Thanks in advance!
Answer
Template code should be visible at the time of instantiation, meaning that the definition of the functions must also be in the header.
No comments:
Post a Comment