Loading

C++模板的定义一定要在头文件中 - LNK2019无法链接的外部符号,LNK1120无法解析的外部命令

编译器在模板函数的调用处,才最终知道如何生成代码。

模板函数的不能像普通的成员函数那样声明于头文件而定义在cpp源文件,而是一定要定义在头文件中。

若像普通成员函数那样声明和定义,单个文件可以编译通过,但被其他文件使用时会报LNK2019,LNK1120错误:


例外:

如果这个模板函数是某个类的内部类的成员函数,它是可以仅在外部类的头文件中声明,然后在外部类的cpp源文件中定义的。如:

A.h

class A {
....
    class B {
        template<class T>
        void Func(T t);
    }
}

A.cpp

#include "A.h"

template<class T>
A::B::Func(T t)
{
    do_something_with(t);
}
posted @ 2020-02-16 00:32  dylanchu  阅读(854)  评论(0编辑  收藏  举报