头文件中:
// MFCWinCEDlg.h : header file
....
private:
CCESeries m_ceSeries; 

static void CALLBACK OnSeriesRead(CWnd* pWnd,BYTE* buf,int bufLen);
static void EnterMFGListen(HWND hRecv,BYTE* buf,int bufLen);//
....源文件:
// MFCWinCEDlg.cpp : implementation file
//
....
//函数EnterMFGListen实现。
void CMFCWinCEDlg::EnterMFGListen(HWND hRecv,BYTE* buf,int bufLen)
{
BYTE buf3[]={0x10,0x01,0xB0,0xA7,0xA6,0x77,0x01,0x00,0x0B,0x00,0x01,0x0B,0x00,0x00,0x10,0x03};
BYTE buf4[]={0x0D};
BYTE bufComplete[]={0x0D,0x0A,0x3C,0x43,0x4F,0x4D,0x50,0x4C,0x45,0x54,0x45,0x3E,0x0D,0x0A,0x3E};//..<COMPLETE>..>
int i=0;
if((buf[11]==0x05)&&(bufLen==16))
{
if(!m_ceSeries.WritePort(buf3,16)) //编译出错地方
{
OutputString(hRecv,L"\r\nSend command failed.");
return;
}
OutputString(hRecv,L"\r\nWaiting for receiver to reboot ...\r\n");
}
if((buf[11]==0x0B)&&(bufLen==16))
{
if(!m_ceSeries.WritePort(buf4,1))//编译出错地方
{
                        OutputString(hRecv,L"\r\nSend command failed.");
return;
}
}
if(bufLen==15)
{
WriteFlag = nListen;
}
}//函数OnSeriesRead实现
void CMFCWinCEDlg::OnSeriesRead(CWnd* pWnd,BYTE* buf,int bufLen)
{
CMFCWinCEDlg *pDlg = (CMFCWinCEDlg *)pWnd;
HWND hRecvEdit = ::GetDlgItem(pDlg->m_hWnd, IDC_EDIT_RECV);
int j=0;
int i=0;
int iflag=0;
TCHAR InMFGMode[]=L"In MFG mode";
TCHAR szBuf[2048]={0};
TCHAR szRecv[2048]={0};
for(i=0;i<bufLen;i++)
{
if((buf[i]!='\0')&&(buf[i]>31)&&(buf[i]<127))
{
break;
}
}
for(;i<bufLen;i++)
{
szRecv[j++]=buf[i];
}
szRecv[j]='\0';
if(WriteFlag==nEnterMFG)
{
EnterMFGListen(hRecvEdit,buf,bufLen);//函数调用
}
else
{
OutputString(hRecvEdit,szRecv); 
}
}
....错误信息:
1>.\MFCWinCEDlg.cpp(242) : error C2228: left of '.WritePort' must have class/struct/union
1>.\MFCWinCEDlg.cpp(251) : error C2228: left of '.WritePort' must have class/struct/union

解决方案 »

  1.   

    static   void   EnterMFGListen(HWND   hRecv,BYTE*   buf,int   bufL...static函数是无法直接访问instance member: m_ceSeries的
      

  2.   

    静态函数没有this指针,不能直接访问类的非静态成员。
    把EnterMFGListen定义为一般成员函数。
    EnterMFGListen(hRecvEdit,buf,bufLen);//函数调用
    改成pDlg->EnterMFGListen(hRecvEdit,buf,bufLen);
      

  3.   

    多谢几位的回复!看得出,几位都是对C++了解很深的。To:crumpy,
    如果我把EnterMFGListen的static去掉,又会出现调用“EnterMFGListen”非法的错误;To:yxz_lp,
    原本在.h头文件里是有包含
    #include "CESeries.h"
    的,在.cpp源文件里没有包含,
    看了您的回复,我把.cpp里也加上include “CESeries.h”,但是结果还是一样有错误,并且同样的错误;To:ouyh12345,
    那是不是说必须得把m_ceSeries定义为static呢?这样的话,其他的成员函数还能用不?To:cnzdgs ,
    等我试完了给你答复,谢谢您的详细回复!
      

  4.   

    cnzdgs 的方法可以。
    多谢。大家可以简单的介绍一下
    public/private/protected中的变量及其函数的用法吗?另外,还有,变量、函数加static和不加都由什么区别?提供一些好的技术网站或者文章都行,
    多谢了,
      

  5.   

    public:无访问限制;
    private:只有类的成员函数和其友元可以访问;
    protected:该类及其派生所有子孙类的成员函数和友元可以访问。加static定义的成员相当于全局变量或者函数,不依赖于实例指针,该类的所有实例共享同一个成员。静态函数内部没有this指针,如果在静态函数中要访问非静态成员,必须指明类的实例。