类模板无法解析的外部符号
Posted zwj-199306231519
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类模板无法解析的外部符号相关的知识,希望对你有一定的参考价值。
如果将类模板的声明和实现写在两个独立的文件中,在构建时会出现“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; }
以上是关于类模板无法解析的外部符号的主要内容,如果未能解决你的问题,请参考以下文章