Я новичок в C++. Я пытаюсь создать pgm, который содержит 2 класса, из которых один класс имеет функцию-член, которая будет генерировать функцию обратного вызова в другом классе, хотя указатель функции, но я продолжаю получать следующие ошибка.не может преобразовать 'int (B :: *) (std :: string)' to 'int (*) (std :: string)' в присваивании pt2function = & B :: generate_callback;
#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: // ru. cppreference.com/w/cpp/utility/functional/bind). –
@Someprogrammerdude какие исправления я иду вперед, если я должен использовать указатели функций? – TheNVP
Вам нужно сделать 'pt2function' указателем на функцию' B'. Синтаксис в основном показан в сообщении об ошибке. –