标签:文件 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