问题描述
- vs2010运行程序报错:error LNK2019: 无法解析的外部符号
- 如题,我在vs2010环境下做C++练习题时出现该错误。程序代码如下:
//array.h#ifndef ARRAY_H#define ARRAY_Htemplate<typename T>class Array{public: Array(int n);//数组首地址不用指定,待会分配 Array(Array &a); ~Array(); T getAt(int i);//返回第i个数组元素 void setAt(T xint i);//将第i个元素设置为xprotected:private: T *array;//数组首地址 int length;//数组长度};#endif//array.cpp#include ""array.h""template<typename T>//所有成员函数前必须加模板声明Array<T>::Array(int n)//成员函数类名后需加<T>{ array=new T[n]; length=n;}template<typename T>Array<T>::Array(Array &a){ length=a.length; array=new T[length]; for(int i=0;i<length;i++) array[i]=a.array[i];//数据复制}template<typename T>Array<T>::~Array(){ delete []array;}template<typename T>T Array<T>::getAt(int i){ return array[i];}template<typename T>void Array<T>::setAt(T xint i){ array[i]=x;}//test.cpp#include ""array.h""#include <iostream>using namespace std;void main(){ int a[]={12345}; double b[]={00.51.01.52.0}; Array <int>a1(5);//使用时必须指明传递给类模板的数据类型 Array <double>b1(5);//必须分两行写 for (int i=0;i<5;i++) { a1.setAt(a[i]i);//数据拷给对象 b1.setAt(b[i]i); } Array <int>a2(a1); for (int i=0;i<5;i++) { cout<<a1.getAt(i)<<"" ""<<a2.getAt(i)<<"" ""<<b1.getAt(i)<<endl; }}
具体的报错信息如下:
c: __thiscall Array::~Array(void)"" (??1?$Array@N@@QAE@XZ),该符号在函数 _main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 ""public: __thiscall Array::~Array(void)"" (??1?$Array@H@@QAE@XZ),该符号在函数 _main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 ""public: int __thiscall Array::getAt(int)"" (?getAt@?$Array@H@@QAEHH@Z),该符号在函数 _main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 ""public: double __thiscall Array::getAt(int)"" (?getAt@?$Array@N@@QAENH@Z),该符号在函数 _main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 ""public: __thiscall Array::Array(class Array &)"" (??0?$Array@H@@QAE@AAV0@@Z),该符号在函数 _main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 ""public: void __thiscall Array::setAt(doubleint)"" (?setAt@?$Array@N@@QAEXNH@Z),该符号在函数 _main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 ""public: void __thiscall Array::setAt(intint)"" (?setAt@?$Array@H@@QAEXHH@Z),该符号在函数 _main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 ""public: __thiscall Array::Array(int)"" (??0?$Array@N@@QAE@H@Z),该符号在函数 _main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 ""public: __thiscall Array::Array(int)"" (??0?$Array@H@@QAE@H@Z),该符号在函数 _main 中被引用
1>D:vsprojectschaper5array3Debugarray3.exe : fatal error LNK1120: 9 个无法解析的外部命令补充:我将上述代码改写到同一个cpp文件中,发现问题解决。
我重新建立过项目和文件,确定不是建错工程、建错文件等情况。望各位给出一些方向,谢谢!
解决方案
我将上述代码改写到同一个cpp文件中,发现问题解决引用头文件中包含了类,
和一些函数声明
而主函数调用的时候是找不到函数体的(默认去系统函数库去找)、
找不到所以链接错误