link2001错误,附头文件和错误信息!

lj_vbplayer 2009-11-28 04:05:28
小弟做了一个简单的矩阵算法,编译完源文件后link出问题。好像是找不到函数,但是以下函数都有定义,也在main中include了,不知道错在哪里,恳请各位大虾指点!万分感激!

头文件如下:
#ifndef _COMPLEX_H_
#define _COMPLEX_H_

#include <iostream>

using std::istream;
using std::ostream;

template <class D> class complex
{
friend ostream &operator<<(ostream &, const complex<class D> &);
friend istream &operator>>(istream &, complex<class D> &);

public:
complex (D=0.0, D=0.0); //constructor
complex operator+(const complex &) const; //plus
complex operator-(const complex &) const; //minus
complex operator*(const complex &) const; //multiplication
complex operator/(const complex &) const; //division
complex &operator=(const complex &); //overload assign
D real() const; //get real part
D imag() const; //get imaginary part
complex & conj(); //get conjugate
bool operator==(const complex &); //equal
bool operator!=(const complex &); //unequal
void Print() const; //output

private:
D rl; //real part
D im; //imaginary part
};
#endif

错误信息如下:

fnMatrixInvert.obj : error LNK2001: unresolved external symbol "public: class complex<double> __thiscall complex<double>::operator-(class complex<double> const &)const " (??G?$complex@N@@QBE?AV0@ABV0@@Z)
fnMatrixInvert.obj : error LNK2001: unresolved external symbol "public: class complex<double> __thiscall complex<double>::operator+(class complex<double> const &)const " (??H?$complex@N@@QBE?AV0@ABV0@@Z)
fnMatrixInvert.obj : error LNK2001: unresolved external symbol "public: double __thiscall complex<double>::imag(void)const " (?imag@?$complex@N@@QBENXZ)
fnMatrixInvert.obj : error LNK2001: unresolved external symbol "public: class complex<double> __thiscall complex<double>::operator/(class complex<double> const &)const " (??K?$complex@N@@QBE?AV0@ABV0@@Z)
fnMatrixInvert.obj : error LNK2001: unresolved external symbol "public: double __thiscall complex<double>::real(void)const " (?real@?$complex@N@@QBENXZ)
fnMatrixInvert.obj : error LNK2001: unresolved external symbol "public: class complex<double> __thiscall complex<double>::operator*(class complex<double> const &)const " (??D?$complex@N@@QBE?AV0@ABV0@@Z)
fnMatrixInvert.obj : error LNK2001: unresolved external symbol "public: class complex<double> & __thiscall complex<double>::conj(void)" (?conj@?$complex@N@@QAEAAV1@XZ)
fnMatrixInvert.obj : error LNK2001: unresolved external symbol "public: class complex<double> & __thiscall complex<double>::operator=(class complex<double> const &)" (??4?$complex@N@@QAEAAV0@ABV0@@Z)
fnMatrixInvert.obj : error LNK2001: unresolved external symbol "public: __thiscall complex<double>::complex<double>(double,double)" (??0?$complex@N@@QAE@NN@Z)
Debug/InverseMatrix.exe : fatal error LNK1120: 9 unresolved externals
Error executing link.exe.

多谢!
...全文
56 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ericming200409 2009-11-28
  • 打赏
  • 举报
回复
你用到模板了,讲定义和实现都放在头文件里头,很多编译器对模板支持不是很好,以前我也老碰到这样的问题,放头文件就好了,至于其他问题,再考虑咯
lj_vbplayer 2009-11-28
  • 打赏
  • 举报
回复
定义在其他cpp里面,已经加入了,如下:
#include "Complex.h"

template <class D>
complex<D>::complex(D r, D i)
{
rl = r;
im = i;
}

template <class D>
complex<D> complex<D>::operator+ (const complex<D> & cplx) const
{
complex<class D> sum;
sum.rl = rl + cplx.rl;
sum.im = im + cplx.im;
return sum;
}

template <class D>
complex<D> complex<D>::operator- (const complex<D> & cplx) const
{
complex<class D> diff;
diff.rl = rl - cplx.rl;
diff.im = im - cplx.im;
return diff;
}

template <class D>
complex<D> complex<D>::operator* (const complex<D> & cplx) const
{
complex<class D> muti;
muti.rl = rl * cplx.rl - im * cplx.im;
muti.im = im * cplx.rl + rl * cplx.im;
return muti;
}

template <class D>
complex<D> complex<D>::operator/ (const complex<D> & cplx) const
{
complex div;
div.rl = (rl * cplx.rl + im * cplx.im) / (cplx.rl * cplx.rl + cplx.im * cplx.im);
div.im = (im * cplx.rl - rl * cplx.im) / (cplx.rl * cplx.rl + cplx.im * cplx.im);
return div;
}

template <class D>
D complex<D>::real() const
{
return rl;
}

template <class D>
D complex<D>::imag() const
{
return -im;
}

template <class D>
complex<D> &complex<D>::conj()
{
im = -im;
return *this;
}
jackyjkchen 2009-11-28
  • 打赏
  • 举报
回复
你的定义在哪里?我只看到声明,如果定义在其他cpp文件,需要把cpp文件加入工程

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧