C ++类静态成员函数调用错误

时间:2017-05-15 14:15:30

标签: c++ visual-studio mfc static-methods static-functions

我用visual studio写了一个项目。在项目中,我构建了一个名为CSimApplianceDlg的类,它有两个成员:

static UINT RecvDataFrame(LPVOID pParam)CSerialPort m_Port

class CSimApplianceDlg : public CDialog
{
// Construction
public:
CSimApplianceDlg(CWnd* pParent = NULL); // standard constructor

// Implementation
protected:
HICON m_hIcon;

// Added for Serial Port operation
static UINT RecvDataFrame(LPVOID pParam); // Process received data
......
private:
......
unsigned char m_SendData[MAX_LEN]; // Data to be sent
int len;                           // the length of data to be sent
public:
CSerialPort m_Port;     // CSerialPort Object
......

CSerialPort有一个公共成员函数WriteToPort,可以通过串口发送数据。

public:
void      WriteToPort(char* string);
void      WriteToPort(char* string,int n);
void      WriteToPort(LPCTSTR string);
void      WriteToPort(LPCTSTR string,int n);

我致电

m_Port.WriteToPort(m_SendData,len);

在UINT CSimApplianceDlg :: RecvDataFrame(LPVOID pParam)中。但是,在构建项目时,就在调用线路上,我得到了

  

1> E:\ mysourcecode \智能家居\ simappliance \ simappliance \ simappliancedlg.cpp(557)       :错误C2228:'。WRriteToPort'的左边必须有class / struct / union
   1> e:\ mysourcecode \ smarthome \ simappliance \ simappliance \ simappliancedlg.cpp(557):错误C2597:非法引用非静态成员'CSimApplianceDlg :: m_SendData'
   1> e:\ mysourcecode \ smarthome \ simappliance \ simappliance \ simappliancedlg.cpp(557):错误C2597:非法引用非静态成员'CSimApplianceDlg :: len'

我该如何处理这些错误?而且WriteToPort被称为,因为我 我不熟悉LPCTSTR

1 个答案:

答案 0 :(得分:0)

函数static UINT RecvDataFrame(LPVOID pParam)是静态的。这意味着您可以在没有对象CSimApplianceDlg的实例化的情况下调用它。换句话说,您可以从任何地方调用CSimApplianceDlg :: RecvDataFrame(),这通常就是回调函数的情况。 这意味着在该函数中,您无法访问成员变量(m_Port)。 如前所述,我们没有足够的信息来帮助,但传递的pParam可能有一个指向对象的指针......或者,如果它是你应用程序中唯一的窗口,你可以尝试AfxGetMainWnd()。 LPCTSTR简单地定义为const TCHAR *,其中TCHAR是char或wchar_t 如果您使用的是ANSI或Unicode。祝好运!