今天在实现一个二叉树的时候,用到了模板,没在意,和平时一样写了两个文件:BinaryTree.h,BinaryTree.cpp。思路和平时一样,h文件中定义了模板类,然后在cpp文件中实现了一些功能函数。
然后在test.cpp中测试,遇到了一些问题、
问题出现如下:
- 使用g++直接编译的时候提示,基本上都是undefined reference to错误:
test_binarytree.cpp:(.text+0x16e): undefined reference to `BinaryTree<std::string>::BinaryTree()'
......
- 分别编译单独文件,均可生成 .o文件,所以排除单个文件本身的错误
- 连接两个o文件时,仍然提示上述错误,很明显,连接时,寻找函数出错了。
网上查的资料如下:
编译器不支持 模板类定义和实现的分离,即类定义和实现不能分开放在h头文件和cpp源码文件中;
经过测试,貌似把cpp文件的东西都搬到.h文件中,如果cpp文件还在&