- ベストアンサー
error C3867 関数呼び出しには引数リスト
- VS2008 VC++ 環境でコンパイル中に、error C3867 関数呼び出しには引数リストがありませんというエラーが発生
- エラーの原因は、Cortex_SetDataHandlerFunc関数に引数リストを渡していないため
- 解決方法は、関数呼び出し時に引数リストを渡すことである
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
いや、だから、 Cortex_SetDataHandlerFunc() の引数にはメンバ関数を渡せないんじゃないですか? 通常の関数とメンバ関数は互換ではありませんよ?
その他の回答 (2)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> 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 */ どんな記述にすれば、いいのでしょうか?
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> エラーの説明をみると、「メンバへのポインタを作成するために '&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 *)' に変換できません ←このえらーになります。
お礼
ご指摘ありがとうございました。 通常の関数に変更したら、コンパイルエラーは直りました。