CArray编译后的问题(调了一上午了,在线等)!

来源:百度知道 编辑:UC知道 时间:2024/05/04 11:31:22
在主窗口类CMoveLineDlg的头文件中加入了
#include <afxtempl.h>
下面是主要的一些函数:(CMoveLineDlg是主窗口类)
void CMoveLineDlg::OnTimer(UINT nIDEvent)
{ if (nIDEvent==1)
{
if (nPoint> =pointarray.GetSize())
{KillTimer(1);}
else
{
nPoint++;
Invalidate(FALSE);
}
}
CDialog::OnTimer(nIDEvent);
}

void CMoveLineDlg::LineDDACallback(int x_1,int y_1,LPARAM lpdc)
{
pointarray.Add(CPoint(x_1,y_1)); //一直是这儿出错
}

void CMoveLineDlg::StartDraw()
{
pointarray.RemoveAll();
nPoint = 0;
CDC* pDC=GetDC(); //获取当前设备环境句柄
LineDDA(110,215,271,158,(LINEDDAPROC)LineDDACallback,(long)pDC);
SetTimer(1,10,NULL);

}

可是编译时,出现如下错误:
error C2228: left of '.Add' must have class/struct/union type

我知道这可能是因为没有声明或没有引入对应的头文件。我查了MSDN.Add也确实是CArray的一个方法。

pointarray.Add(CPoint(x_1,y_1)); //一直是这儿出错
改为:pointarray->Add(CPoint(x_1,y_1));

你的这个pointarray是怎么定义的呢?
那就(CPoint*)pointarray->Add(CPoint(x_1,y_1));

这个Add()函数应该是CPoint类里的吧,

(CArray *)pointarray->Add(CPoint(x_1,y_1));

ps:我看你函数名叫CALLBACK,是不是回调函数啊?回调函数一般是要全局函数才行哦

不必弄成全局函数,用static修饰就可以了,这样做某些处理更方便.

LineDDACallback是CMoveLineDlg的静态成员函数的话,是不能直接访问类的成员变量的,当然就不认识pointarray了。最简单的处理方法,把CArray <CPoint,CPoint&> pointarray;声明成全局变量。
----
直接把它CUT然后PASTE到CPP文件里头