2017-05-15 16 views
-2

私はVisual Studioでプロジェクトを作成します。このプロジェクトでは私は2つのメンバを持つCSimApplianceDlgというクラスを構築する:C++クラス静的メンバー関数呼び出しエラー

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); 

私はUINT CSimApplianceDlgで

m_Port.WriteToPort(m_SendData,len);

と呼ばれる:: RecvDataFrame(LPVOID pParam)。ただ、呼び出しのラインで、プロジェクトをビルドしながら、しかし、私が得た

1> E:\ mysourcecode \ smarthome \ simappliance \ simappliance \ simappliancedlg.cpp(557) :エラーC2228は: "の左.WriteToPortはクラス/構造体/共用体を持つ必要があります
1:e:\ mysourcecode \ smarthome \ simappliance \ simappliance \ simappliancedlg.cpp(557):エラーC2597:非staticメンバ 'CSimApplianceDlg :: m_SendData'への参照が不正です
1> e:\ mysourcecode \ smarthome \ simappliance \ simappliance \ simappliancedlg.cpp(557):エラーC2597:非静的メンバー 'CSimApplianceDlg :: len'への不正な参照

これらのエラーをどうすれば処理できますか?そして はLPCTSTRに慣れていないので、WriteToPortが呼び出されます。

+2

これらのエラーが発生したコードを表示するのを忘れました。 –

+0

'CSerialPort'クラスの*インスタンス*の作成に失敗した可能性があります。マイケルが言ったように、実際のコードを見ることができなければ、わからない。質問を[mcve]で更新してください。 –

+0

は "m_Port.WriteToPort(m_SendData、len);"を呼び出す際にリンナがエラーになります。 – pellyhawk

答えて

0

静的な関数UINT RecvDataFrame(LPVOID pParam)は静的です。つまり、CSimApplianceDlgオブジェクトのインスタンス化なしで呼び出すことができます。言い換えれば、CSimApplianceDlg :: RecvDataFrame()は、コールバック関数の多くの場合、どこからでも呼び出すことができます。 これは、その関数内では、メンバー変数(m_Port)にアクセスできないことを意味します。 先ほど指摘したように、私たちは助けになるほどの情報がありませんが、渡されたpParamにオブジェクトへのポインタがある可能性があります...アプリ内の唯一のウィンドウであれば、AfxGetMainWnd()を試すことができます。 LPCTSTRは、const TCHAR *と定義されています.TCHARはcharまたはwchar_t です(ANSIまたはUnicodeの場合)。がんばろう!

関連する問題