声明和实现在一个文件中:
template<class T> class book { public: book(); ~book(); private: }; template<class T> book<T>::book() { } template<class T> book<T>::~book() { } int main() { book<int> b; return 0; }
声明和实现分开在h和cpp文件中:
潜在问题是,仅仅按照普通class的方式分开,在编译的时候,会报 link2019 错误。原因是在编译实例化模板类的文件时,模板类只有声明文件(h)被链接,其实现文件(cpp里面的部分)找不到。
解决办法:
* 1 在实例化模板类的文中开头,包含该 cpp 文件(#include "xxx.cpp")
* 2 声明和实现写在同一个h文件中;(本人不推荐这么做)
------------------- book.h -----------------------------------
#pragma once template<class T> class book { public: book(); ~book(); private: };
------------------- book.cpp -----------------------------------
#include "book.h" template<class T> book<T>::book() { } template<class T> book<T>::~book() { }
------------------- main.cpp -----------------------------------
#include "book.h" #include "book.cpp" int main() { book<int> b; return 0; }
原文链接: https://www.cnblogs.com/alexYuin/p/11546108.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/302900
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!