Error LNK2019: unresolved external symbol C++模板类声明与定义链接错误问题

编译器在编译模板时,并不会生成代码,只有遇到实例化的时候才会生成代码。因此,当我们只引用模板声明文件的时候,在实例化的对象时候,模板的定义问文件是不可见的,于是出现链接错误。例如:

//A.h
#pragma once
template<typename T>
class A{
public:
    A();
    ~A();
};
//A.cpp
#include"A.h"

template<typename T>
A<T>::A(){
}

template<typename T>
A<T>::~A(){

}
//Main.cpp
#include"A.h"

int main() {
    A<int> a;

    return 1;
}

以上的模板使用则会出现LNK2019错误,原因如上述所言。

解决方法:

(1)在Main.cpp当中同时引用A.h和A.cpp文件,如下所示:

#include"A.h"
#include"A.cpp"

int main() {
    A<int> a;

    return 1;
}

(2)将A的声明和定义同时写在一个文件当中。如下所示:

#pragma once
template<typename T>
class A{
public:
    A();
    ~A();
};


template<typename T>
A<T>::A(){
}

template<typename T>
A<T>::~A(){

}

以上。

原文地址:https://www.cnblogs.com/code-wangjun/p/9115069.html