私はC++を新しくしました.2つのクラスを含むpgmを作成しようとしています。そのうちの1つのクラスは、関数ポインタを介して別のクラスのコールバック関数を生成するメンバ関数を持っていますが、エラー。は、代入pt2function =&B :: generate_callback;で 'int(B :: *)(std :: string)'を 'int(*)(std :: string)'に変換できません。
#include <iostream>
#include <string>
using namespace std;
class B
{
private: std::string str1;
public: int generate_callback(std::string str1);
};
int B::generate_callback(std::string str1)
{
if ((str1=="Generate")||(str1=="generate"))
{
Cout<<"Callback generated ";
}
return 0;
}
class A : public B
{
public:
void count(int a,int b);
private: int a,b;
};
void A::count(int a, int b)
{
for (a=1;a<b;a++){
if(a==50)
{
cout<<"Generating callback ";
goto exit;
}
exit: ;
}
}
int (*pt2function)(string)=NULL;
int main()
{
B obj1;
A obj2;
string str;
cout<<"To generate callback at int i=50 please enter 'generate'";
cin>>str;
obj2.count(1,100);
pt2function=&B::generate_callback;
(obj1.*pt2function)(str);
return 0;
}
エラー:
main.cpp:57: error: cannot convert 'int (B::*)(std::string) {aka int (B::*)(std::basic_string<char>)}' to 'int (*)(std::string) {aka int (*)(std::basic_string<char>)}' in assignment
pt2function=&B::generate_callback;
/home/adt/practice/N_practise/n_pract_2/pract2/main.cpp:58: error: 'pt2function' cannot be used as a member pointer, since it is of type 'int (*)(std::string) {aka int (*)(std::basic_string<char>)}'
(obj1.*pt2function)(str);
^
^
メンバ関数へのポインタは非メンバ関数へのポインタと同じではなく、 'pt2function'は非メンバ関数へのポインタです。私はあなたが['std :: function'](http://en.cppreference.com/w/cpp/utility/functional/function)と[' std :: bind'](http:// en。代わりにcppreference.com/w/cpp/utility/functional/bind)。 –
@Someprogrammerdude私は関数ポインタを使用する必要がある場合、私は先に進んでいますか? – TheNVP
'pt2function'を' B'メンバ関数へのポインタにする必要があります。構文は、基本的にエラーメッセージに表示されます。 –