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

//関数ポインタについて質問させてください。
//error C2440: '=' : 'void (__thiscall A::* )(int,int)' から 'void (__cdecl *)(int,int)' に変換できません。
//というエラーが出ます。
//どうすればいいのか教えてください。
//よろしくお願いします。
#include<stdio.h>
class A
{
public:
void (*aaa)(int a,int b);
virtual void test(int a,int b)=0;
virtual void test2(int a,int b)=0;
void execute()
{
aaa=test;//error C2440
}
};
class B : public A
{
public:
void test(int a,int b)
{
printf("test");
}
void test2(int a,int b)
{
printf("test2");
}
};
int main()
{
B b;
b.execute();
b.aaa(2,3);
return 0;
}

A 回答 (1件)

× : void (*aaa)(int a,int b);


○ : void (A::*aaa)(int a,int b);

この回答への補足

回答ありがとうございます。
一応できました。
#include<stdio.h>
class A
{
public:
void (A::*aaa)(int a,int b);
virtual void test(int a,int b)=0;
virtual void test2(int a,int b)=0;
void execute1()
{
aaa=test;//OK
}
void execute2()
{
aaa=test2;//OK}
void aaacall(int a,int b)
{
(this->*aaa)(a,b);
}
};
class B : public A
{
public:
void test(int a,int b)
{
printf("test a+b=%d",a+b);
}
void test2(int a,int b)
{
printf("test2 a-b=%d",a-b);
}
};
int main()
{
B b;
b.execute1();
b.aaacall(1,2);
b.execute2();
b.aaacall(1,2);
getchar();
return 0;
}

補足日時:2006/06/24 22:32
    • good
    • 0
この回答へのお礼

お世話になりました。
ありがとうございました。

お礼日時:2006/06/24 22:54

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