zoukankan      html  css  js  c++  java
  • 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(){
    
    }

    以上。

  • 相关阅读:
    1043. 输出PATest(20)
    1042. 字符统计(20)
    1041. 考试座位号(15)
    1040. 有几个PAT(25)
    1035. 插入与归并(25)
    栈:火车进站
    ABC Fennec VS. Snuke
    费解的开关
    最短Hamilton路径
    built?
  • 原文地址:https://www.cnblogs.com/code-wangjun/p/9115069.html
Copyright © 2011-2022 走看看