darknec 2014-02-24 13:47 采纳率: 0%
浏览 6542

vs2010运行程序报错:error LNK2019: 无法解析的外部符号

如题,我在vs2010环境下做C++练习题时出现该错误。程序代码如下:

 //array.h
#ifndef ARRAY_H
#define ARRAY_H
template<typename T>
class Array
{
public:
    Array(int n);//数组首地址不用指定,待会分配
    Array(Array &a);
    ~Array();
    T getAt(int i);//返回第i个数组元素
    void setAt(T x,int i);//将第i个元素设置为x
protected:
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 x,int i)
{
    array[i]=x;
}

//test.cpp
#include "array.h"
#include <iostream>
using namespace std;
void main()
{
    int a[]={1,2,3,4,5};
    double b[]={0,0.5,1.0,1.5,2.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(double,int)" (?setAt@?$Array@N@@QAEXNH@Z),该符号在函数 _main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall Array::setAt(int,int)" (?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:\vsprojects\chaper5\array3\Debug\array3.exe : fatal error LNK1120: 9 个无法解析的外部命令

补充:我将上述代码改写到同一个cpp文件中,发现问题解决。
我重新建立过项目和文件,确定不是建错工程、建错文件等情况。望各位给出一些方向,谢谢!

  • 写回答

1条回答 默认 最新

  • 滴水冰冻 2014-02-27 03:24
    关注

    我将上述代码改写到同一个cpp文件中,发现问题解决,引用头文件中包含了类,
    和一些函数声明
    而主函数调用的时候是找不到函数体的(默认去系统函数库去找)、
    找不到所以链接错误

    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划