码迷,mamicode.com
首页 > 其他好文 > 详细

类模板无法解析的外部符号

时间:2020-05-29 23:32:04      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:文件   struct   pen   sys   ret   函数声明   类模板   system   http   

如果将类模板的声明和实现写在两个独立的文件中,在构建时会出现“error LNK2019: 无法解析的外部符号 ”的错误。

 实例:

 MyClass.h:

#ifndef _CLASS_TEMPLATE_H_
#define _CLASS_TEMPLATE_H_

template<typename T1, typename T2>
class MyClass
{
public:
    MyClass(T1 tOne, T2 tTwo);//Constructor
    void Show();

private:
    T1 mOne;
    T2 mTwo;
};
#endif

MyClass.cpp:

#include "MyClass.h"
#include <iostream>
using namespace std;

template <typename T1, typename T2>
MyClass<T1, T2>::MyClass(T1 tOne, T2 tTwo)
{
  mOne = tOne;
   mTwo = tTwo;
} template
<typename T1, typename T2> void MyClass<T1, T2>::Show() { cout << "mOne=" << mOne << ", mTwo=" << mTwo << endl; }

Main.cpp

#include<iostream>
#include "MyClass.h"
using namespace std;

int main()
{
    MyClass<int, int> class1(3, 5);
    class1.Show();

    system("pause");
    return 0;
}

这样写会报错:

技术图片

 解决办法:将函数实现和函数声明合并在一起,即将MyClass.cpp和MyClass.h相合并,即直接写为MyClass.h,去掉MyClass.cpp文件,如下

MyClass.h

#ifndef _CLASS_TEMPLATE_H_
#define _CLASS_TEMPLATE_H_

template<typename T1, typename T2>
class MyClass
{
public:
    MyClass(T1 tOne, T2 tTwo)
    {
        mOne = tOne;
        mTwo = tTwo;
    }
    void Show()
    {
        cout << "mOne=" << mOne << ", mTwo=" << mTwo << endl;
    }

private:
    T1 mOne;
    T2 mTwo;
};
#endif

Main.cpp:

#include<iostream>
#include "MyClass.h"
using namespace std;

int main()
{
    MyClass<int, int> class1(3, 5);
    class1.Show();

    system("pause");
    return 0;
}

 

类模板无法解析的外部符号

标签:文件   struct   pen   sys   ret   函数声明   类模板   system   http   

原文地址:https://www.cnblogs.com/zwj-199306231519/p/12989829.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!