dポイントプレゼントキャンペーン実施中!

クラスのメンバ関数を、ある関数(実は qsort)の引数として渡したい
と思っています。環境は
OS:Windows XP
コンパイラ:C++Builder6 に付属の bcc32.exe
です。
下記のコード(t.cpp)をコマンドプロンプトで
bcc32 t
としてコンパイルすると「※1」の行で下のエラーになります。

「エラー E2235 t.cpp 29: メンバー関数は呼び出すか
 そのアドレスをとらなければならない(関数 main() )」

どのように直せば良いでしょうか?
--------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>

class Aclass {
public:
void f(int);
};

void Aclass::f(int x)
{
printf("classfunc %d\n", x);
}

void sub1(int x)
{
printf("sub-1 %d\n", x);
}

void call_func(void(*func)(int), int x)
{
func(2*x + 1);
}

void main(void)
{
call_func((void(*)(int))sub1, 11);

Aclass *a = new Aclass;
call_func((void(*)(int))a->f, -7); //※1
delete a;
}
--------------------------------------------------------
この掲示板、行頭の空白が削除されてしまいますねー。

A 回答 (1件)

> クラスのメンバ関数を、ある関数(実は qsort)の引数として渡したいと思っています。



メンバ関数のポインタは、通常の関数ポインタにキャストできません。
# staticメンバなら可能

この回答への補足

voidf(int);

staticvoidf(int);
に変更したら、コンパイルできました。
ありがとうございました。

補足日時:2004/09/13 12:46
    • good
    • 0

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