将对象方法的地址传递给另一个对象以供调用 我是C++的,我想把一个对象的方法传递给同一个类的另一个对象: class Object{ public: int id; int newId; Object(int _id){ id = _id; }; int (*function)(); int someFunction(){ return id*2; }; void updateFunction(){ newId = function(); } }; int someOtherFuntion(){ return 3; } int main(){ Object* obj[2]; obj[0] = new Object(1); obj[1] = new Object(2); //next line is where the error happens obj[0]->function = &obj[1]->someFunction; obj[1]->function = &someOtherFuntion; for(int i = 0; i<2; i++){ obj[i]->updateFunction(); } return 1; } 类对象{ 公众: int-id; int-newId; 对象(int\u id){ id=_id; }; int(*函数)(); int someFunction(){ 返回id*2; }; void updateFunction(){ newId=函数(); } }; int someotherFunction(){ 返回3; } int main(){ Object*obj[2]; obj[0]=新对象(1); obj[1]=新对象(2); //下一行是错误发生的地方 obj[0]->function=&obj[1]->someFunction; obj[1]->function=&someotherFunction; 对于(int i=0;iupdateFunction(); } 返回1; }
稍后,我想用循环遍历所有对象,并调用相应的函数,有时调用对象方法,有时调用常规函数将对象方法的地址传递给另一个对象以供调用 我是C++的,我想把一个对象的方法传递给同一个类的另一个对象: class Object{ public: int id; int newId; Object(int _id){ id = _id; }; int (*function)(); int someFunction(){ return id*2; }; void updateFunction(){ newId = function(); } }; int someOtherFuntion(){ return 3; } int main(){ Object* obj[2]; obj[0] = new Object(1); obj[1] = new Object(2); //next line is where the error happens obj[0]->function = &obj[1]->someFunction; obj[1]->function = &someOtherFuntion; for(int i = 0; i<2; i++){ obj[i]->updateFunction(); } return 1; } 类对象{ 公众: int-id; int-newId; 对象(int\u id){ id=_id; }; int(*函数)(); int someFunction(){ 返回id*2; }; void updateFunction(){ newId=函数(); } }; int someotherFunction(){ 返回3; } int main(){ Object*obj[2]; obj[0]=新对象(1); obj[1]=新对象(2); //下一行是错误发生的地方 obj[0]->function=&obj[1]->someFunction; obj[1]->function=&someotherFunction; 对于(int i=0;iupdateFunction(); } 返回1; },c++,class,pointers,methods,C++,Class,Pointers,Methods,稍后,我想用循环遍历所有对象,并调用相应的函数,有时调用对象方法,有时调用常规函数 此返回错误:ISO C++禁止接受绑定成员函数的地址,以形成指向成员函数的指针。 这会调用obj2及其方法吗 不,这个程序格式不正确 还是obj2方法的副本 无法复制函数 请注意,我不想使用typedef,因为我使用的是微控制器 我看不出这两件事之间有任何关系 我想将一个对象的方法传递给同一类的另一个对象 成员函数对于同一类的所有实例都是相同的。它们的地址在不同的对象之间没有差异 根据示例判断,您似乎想要绑定成员
此返回错误:ISO C++禁止接受绑定成员函数的地址,以形成指向成员函数的指针。 这会调用obj2及其方法吗
不,这个程序格式不正确 还是obj2方法的副本 无法复制函数 请注意,我不想使用typedef,因为我使用的是微控制器 我看不出这两件事之间有任何关系 我想将一个对象的方法传递给同一类的另一个对象 成员函数对于同一类的所有实例都是相同的。它们的地址在不同的对象之间没有差异 根据示例判断,您似乎想要绑定成员函数的对象参数。您可以使用函数对象来完成此操作 这会调用obj2及其方法吗 不,这个程序格式不正确 还是obj2方法的副本 无法复制函数 请注意,我不想使用typedef,因为我使用的是微控制器 我看不出这两件事之间有任何关系 我想将一个对象的方法传递给同一类的另一个对象 成员函数对于同一类的所有实例都是相同的。它们的地址在不同的对象之间没有差异从示例判断,您似乎想要绑定成员函数的对象参数。您可以使用函数对象来完成此操作。由于无法将方法分配给函数指针,因此无法使用函数指针进行绑定。
std::function
,这更灵活比函数指针更简单,并使用lambda函数将方法绑定到特定对象
#include <functional>
class Object{
public:
int id;
int newId;
Object(int _id){
id = _id;
};
std::function<int()> function; // function is an int function with no parameters
int someFunction(){
return id*2;
};
void updateFunction(){
newId = function();
}
};
int someOtherFuntion(){
return 3;
}
int main(){
Object* obj[2];
obj[0] = new Object(1);
obj[1] = new Object(2);
obj[0]->function = [=](){ return obj[1]->function(); }; // make a lambda function to bind function to obj[1]
obj[1]->function = someOtherFuntion;
for(int i = 0; i<2; i++){
obj[i]->updateFunction();
}
return 1;
}
#包括
类对象{
公众:
int-id;
int-newId;
对象(int\u id){
id=_id;
};
std::function;//函数是一个不带参数的int函数
int someFunction(){
返回id*2;
};
void updateFunction(){
newId=函数();
}
};
int someotherFunction(){
返回3;
}
int main(){
Object*obj[2];
obj[0]=新对象(1);
obj[1]=新对象(2);
obj[0]->function=[=](){return obj[1]->function();};//生成一个lambda函数将函数绑定到obj[1]
obj[1]->function=someotherfunction;
对于(int i=0;iupdateFunction();
}
返回1;
}
由于无法将方法分配给函数指针,因此无法使用函数指针。但您可以使用std::function
执行任何操作,它比函数指针灵活得多,并使用lambda函数将方法绑定到特定对象
#include <functional>
class Object{
public:
int id;
int newId;
Object(int _id){
id = _id;
};
std::function<int()> function; // function is an int function with no parameters
int someFunction(){
return id*2;
};
void updateFunction(){
newId = function();
}
};
int someOtherFuntion(){
return 3;
}
int main(){
Object* obj[2];
obj[0] = new Object(1);
obj[1] = new Object(2);
obj[0]->function = [=](){ return obj[1]->function(); }; // make a lambda function to bind function to obj[1]
obj[1]->function = someOtherFuntion;
for(int i = 0; i<2; i++){
obj[i]->updateFunction();
}
return 1;
}
#包括
类对象{
公众:
int-id;
int-newId;
对象(int\u id){
id=_id;
};
std::function;//函数是一个不带参数的int函数
int someFunction(){
返回id*2;
};
void updateFunction(){
newId=函数();
}
};
int someotherFunction(){
返回3;
}
int main(){
Object*obj[2];
obj[0]=新对象(1);
obj[1]=新对象(2);
obj[0]->function=[=](){return obj[1]->function();};//生成一个lambda函数将函数绑定到obj[1]
obj[1]->function=someotherfunction;
对于(int i=0;iupdateFunction();
}
返回1;
}
会这样吗?当你尝试时发生了什么?请显示真实的代码。你缺少一个;
和main
必须返回int
。同样在你的示例中,它与方法调用的对象无关。你实际试图实现什么?会这样吗?当你尝试时发生了什么?请显示真实的代码。你丢失了g a;
和main
必须返回int
。同样,在您的示例中,该方法调用的对象与此无关。您实际试图实现什么?但它们返回此对象的值。在这种情况下,我希望obj.function返回obj2@michox只需将obj2作为对象参数传递给member function.感谢您的回答,很遗憾,我可能没有正确描述函数的用途,我深表歉意。让我重新表述我的问题并更新我的代码,但它们会返回此对象的值。在这种情况下,我希望obj.function返回obj2@michox只需将obj2作为对象参数传递给member函数。感谢您的回答,很遗憾,我可能没有正确描述函数的用途。我很抱歉。让我重新表述我的问题并更新我的codeperfect!是否有可能直接在构造函数中执行此操作?对象的构造函数
?只需按任何参数传递函数即可r到构造函数。太好了!有没有直接在构造函数中执行此操作的方法?对象的构造函数
?只需将函数传递给构造函数,就像将任何参数传递给构造函数一样。