Callback: ponteiro de função como argumento e passando um argumento adicional [duplicado]
Oct 04 2020
Como passar um ponteiro de função como argumento com um argumento?
void A(){
std::cout << "hello" << endl;
}
void B(void (*ptr)()){ // function pointer as agrument
ptr(); // call back function "ptr" points.
}
void C(string name){
std::cout << "hello" << name << endl;
}
void D(void (*ptr2)(string name)){ // function pointer as agrument
ptr2(name); // error 1
}
int main(){
void (*p)() = A; // all good
B(p); // is callback // all good
void (*q)(string name) = C;
D(q)("John Doe"); // error 2
return 0;
};
erros:
1 - uso de identificador não declarado 'nome'
2 - tipo de objeto chamado 'void' não é uma função ou ponteiro de função
Respostas
4 songyuanyao Oct 04 2020 at 13:08
Você deve Dtomar dois parâmetros, um para o ponteiro de função, outro para o argumento a ser passado para o ponteiro de função. Por exemplo
void D(void (*ptr2)(string), const string& name){
ptr2(name);
}
então chame como
D(q, "John Doe");
3 MikeCAT Oct 04 2020 at 13:08
namefaz parte da declaração de tipoptr2e não é uma variável emD.- Você está tentando chamar o que é retornado
D, que évoid.,é usado para separar argumentos em C ++.
Experimente isto:
#include <iostream>
#include <string>
using std::endl;
using std::string;
void A(){
std::cout << "hello" << endl;
}
void B(void (*ptr)()){ // function pointer as agrument
ptr(); // call back function "ptr" points.
}
void C(string name){
std::cout << "hello" << name << endl;
}
void D(void (*ptr2)(string name), string name){ // function pointer and a string as agrument
ptr2(name);
}
int main(){
void (*p)() = A; // all good
B(p); // is callback // all good
void (*q)(string name) = C;
D(q, "John Doe"); // pass 2 arguments
return 0;
} // you don't need ; here
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas