大家好:我有个语法方面的问题:
我先建了个复数类:
class CComplex  
{
public:
CComplex(double r=0, double i=0)  { m_real = r; m_imag = i; } 
      CComplex operator -(const CComplex &c);{
    return CComplex(m_real - c.m_real, m_imag - c.m_imag);
}
    ...// 节省篇幅,省略其它
protected:
double m_real;//实部 double m_imag; // 虚部
};
又用MFC的CArray,定义了
CArray<CComplex, CComplex>  m_CComAry[Dimension];
CArray<CComplex, CComplex>  m_CodeBook[Dimension];
以及函数:double Square(CComplex &dIn)  { return  dIn.FindAbs2(); }然而,下面一句话在链接时报错:
Square(m_CComAry[i][j]-m_CodeBook[i][j]);  // i是CArray这个模板类的下标,j是我在上面定义模板数组的下标.
谢谢各位!

解决方案 »

  1.   

    一般可能是没有定义拷贝构造函数和赋值操作符。而且最好用引用:
    CArray <CComplex, CComplex&>  m_CComAry[Dimension]; 
    另外,你定义的是一维数组,怎么能通过二维下标来访问?
      

  2.   

    const int  Max_Rand_Num = 3000;
    const int  CodeBook_Num = 100;
    for (int i = 0; i<Dimension; i++)
    {
    m_CComAry[i].SetSize(Max_Rand_Num);
    m_CodeBook[i].SetSize(CodeBook_Num);
    }
    所以我用二维数组是不错的
    拷贝构造函数和赋值操作符的定义请见最上面的帖子6-8行
    报错如下:
    VQ.obj : error LNK2001: unresolved external symbol "public: class CComplex __thiscall CComplex::operator-(class CComplex const &)" (??GCComplex@@QAE?AV0@ABV0@@Z)
    Debug/NewStudy.exe : fatal error LNK1120: 1 unresolved externals
    多谢各位指教!
      

  3.   

    你定义的是一维数组,怎么能通过二维下标来访问?
    CArray已经有数组的功能了
    不知道楼主要实现啥
      

  4.   

    我想这里的错误与重载运算符-有关 看报的链接错误,似乎是编译器找不到-的定义什么的我还想再次讲下,我定义的实质是二维数组:
    MSDN给我们的例子:CArray<CPoint,CPoint> myArray; 那myArray是一维的,对吧,其实它是个指针,指向一个长度待定的一维数组,我定义CArray  <CComplex, CComplex>  m_CComAry[Dimension];  那么m_CComAry指向一个一维指针数组,数组的每个元素又分别是(同上)指向一维数组Ai(i=0,1,...,Dimension)的首地址的指针,所以我说m_CComAry其实就是指向A的一个二维指针,所以m_CComAry是二维数组      如果注释了带-操作符的那句话,编译就相安无事,虽然不用运算符重载也能实现功能,但我想尝试下,因为以前未学过这方面的知识。还是要感谢大家的帮助