Friday, 11 May 2018

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

casting - Why wasn't Tobey Maguire in The Amazing Spider-Man? - Movies & TV

In the Spider-Man franchise, Tobey Maguire is an outstanding performer as a Spider-Man and also reprised his role in the sequels Spider-Man...