プロが教えるわが家の防犯対策術!

VS2008 VC++ 環境にて、コンパイルで、「error C3867: 'CFrrjiftestDlg::MyDataHandler': 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&CFrrjiftestDlg::MyDataHandler' を使用してください」 が発生しました。ネットで類似のエラーを見ましたが、エラーは回避できませんでした。どうすれば、エラーが直るのか教えてください。

【エラー箇所のソース】
void CFrrjiftestDlg::OnBnClickedButton1()      ← このソースは、frrjiftestDlg.cpp で記述
#include "frrjiftestDlg.h"      

  この間にいろいろな処理を記述

Cortex_SetDataHandlerFunc(MyDataHandler);   ← この行でエラー発生

【frrjiftestDlg.h のヘッダ】 
void MyDataHandler(sFrameOfData* FrameOfData); ← これを記述

【MyDataHandler の記述】
void CFrrjiftestDlg::MyDataHandler(sFrameOfData* FrameOfData)  ← これは、frrjiftestDlg.cpp で記述

 この後に処理を記述

ざっと、こんな感じで書いています。

エラーの説明をみると、「メンバへのポインタを作成するために '&CFrrjiftestDlg::MyDataHandler' を使用してください」となっていますが、いろいろ書いてみましたが、だめでした。

A 回答 (3件)

いや、だから、



Cortex_SetDataHandlerFunc() の引数にはメンバ関数を渡せないんじゃないですか?
通常の関数とメンバ関数は互換ではありませんよ?
    • good
    • 1
この回答へのお礼

ご指摘ありがとうございました。
通常の関数に変更したら、コンパイルエラーは直りました。

お礼日時:2011/07/16 15:23

> Cortex_SetDataHandlerFunc(&CFrrjiftestDlg::MyDataHandler); ←これにすると、


>
> C2664: 'Cortex_SetDataHandlerFunc' : 1 番目の引数を 'void (__thiscall CFrrjiftestDlg::* )(sFrameOfData *)' から 'void (__cdecl *)(sFrameOfData *)' に変換できません ←このえらーになります。

Cortex_SetDataHandlerFunc() の引数にはメンバ関数を渡せないんじゃないですか?
通常の関数とメンバ関数は互換ではありませんよ?

この回答への補足

もう少し説明しますと、

// frrjiftestDlg.h : header file
class CFrrjiftestDlg : public CDialog
{
public:
void PrintFrameOfData(FILE *handle, sFrameOfData *FrameOfData);
void MyDataHandler(sFrameOfData* FrameOfData);
};

// frrjiftestDlg.cpp : implementation file
void CFrrjiftestDlg::MyDataHandler(sFrameOfData* FrameOfData)
{
PrintFrameOfData(handle, FrameOfData);
}
void CFrrjiftestDlg::PrintFrameOfData(FILE *handle, sFrameOfData *FrameOfData)
{
いろんな処理
}
void CFrrjiftestDlg::OnBnClickedButton1()
{
//ここがメイン処理のボタンを押下したときの処理
Cortex_SetDataHandlerFunc(MyDataHandler); ←ここがコンパイルエラー
}


error C3867: 'CFrrjiftestDlg::MyDataHandler': 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&CFrrjiftestDlg::MyDataHandler' を使用してください

↑このエラーになります。

下記の記述にすると、それぞれのエラーになります。
//Cortex_SetDataHandlerFunc(&CFrrjiftestDlg::MyDataHandler); /* C2664 ERROR */
//Cortex_SetDataHandlerFunc(&MyDataHandler); /* C2276 ERROR */

どんな記述にすれば、いいのでしょうか?

補足日時:2011/07/13 23:16
    • good
    • 0

> エラーの説明をみると、「メンバへのポインタを作成するために '&CFrrjiftestDlg::MyDataHandler' を使用してください」となっていますが、いろいろ書いてみましたが、だめでした。



"だめ"とは?

> Cortex_SetDataHandlerFunc(MyDataHandler);   ← この行でエラー発生

これを

Cortex_SetDataHandlerFunc(&CFrrjiftestDlg::MyDataHandler);
あるいは
Cortex_SetDataHandlerFunc(&MyDataHandler);
としてもだめだったのですか? どう"だめ"なのですか?

この回答への補足

Cortex_SetDataHandlerFunc(&MyDataHandler); ←これにすると、

error C2276: '&' : 仮想関数のアドレスを取ろうとしました。 ←このエラーになり、

Cortex_SetDataHandlerFunc(&CFrrjiftestDlg::MyDataHandler); ←これにすると、

C2664: 'Cortex_SetDataHandlerFunc' : 1 番目の引数を 'void (__thiscall CFrrjiftestDlg::* )(sFrameOfData *)' から 'void (__cdecl *)(sFrameOfData *)' に変換できません ←このえらーになります。

補足日時:2011/07/09 14:16
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A