Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将对象方法的地址传递给另一个对象以供调用 我是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 - Fatal编程技术网

将对象方法的地址传递给另一个对象以供调用 我是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到构造函数。太好了!有没有直接在构造函数中执行此操作的方法?
对象的构造函数
?只需将函数传递给构造函数,就像将任何参数传递给构造函数一样。