※ ChatGPTを利用し、要約された質問です(原文:関数ポインタにvirtual関数を与えたいです)
関数ポインタにvirtual関数を与えたいです
このQ&Aのポイント
//関数ポインタについて質問させてください。error C2440: '=' : 'void (__thiscall A::* )(int,int)' から 'void (__cdecl *)(int,int)' に変換できません。というエラーが出ます。どうすればいいのか教えてください。
関数ポインタにvirtual関数を与えたいときに、エラー C2440 が発生し、変換できないというエラーが出ます。どうすれば解決できるでしょうか?
関数ポインタにvirtual関数を与える際に、エラー C2440 が発生します。このエラーを解決するためにはどうすればよいでしょうか?
//関数ポインタについて質問させてください。
//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;
}
お礼
お世話になりました。 ありがとうございました。
補足
回答ありがとうございます。 一応できました。 #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; }