• 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(){
    
    }

    以上。

  • 相关阅读:
    Distributed System
    APP专项测试之兼容性测试
    面试如何正确谈薪?
    跳槽季,如何做好技术面试准备?
    Appium基础
    设置安装程序位置
    获取文件版本号
    28-PV&PVC
    Docker-文件拷贝
    Kubemark压测常用命令
  • 原文地址:https://www.cnblogs.com/code-wangjun/p/9115069.html
Copyright © 2020-2023  润新知