Sunday, July 21, 2019

c++ - Template class constructor




Ok guys...
I have following class




#include 

template >
class BinarySearchTree {
struct TNode {
TValue value;
TNode *pLeft;
TNode *pRight;
};

public:
BinarySearchTree();
~BinarySearchTree();

. . .
private:
TNode *pRoot;

. . .
};



then in my .cpp file i defined the ctor/dtor like this:



template 
BinarySearchTree::BinarySearchTree() : pRoot(0) {}

template
BinarySearchTree::~BinarySearchTree() {
Flush(pRoot);

}


my main function:



int main() {    
BinarySearchTree obj1;
return 0;
}



and i get following linkage error:



public: __thiscall BinarySearchTree>::BinarySearchTree >(void)


i tried to put the constructor definition into the header file and i get no error. only if i try to define it in the cpp file.


Answer



Don't define templates in the cpp file, but put the implementation of the functions in the header file and leave your main function as it is. Templates get inlined by default. Therefore they are not visible to the linker. And the file that contains main() cannot see the definition of the templates. Hence the error.


No comments:

Post a Comment

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...