Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.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++ 将类函数设置为构造函数C++;_C++_Function_Pointers_Constructor - Fatal编程技术网

C++ 将类函数设置为构造函数C++;

C++ 将类函数设置为构造函数C++;,c++,function,pointers,constructor,C++,Function,Pointers,Constructor,我有一个类,我想在构造时不带参数指向一个默认函数,但我想在传递一个带有其中一个参数的函数时更改该函数 我收到一个错误,无法将“类型为”int(MyClass::*)(int myVar)“的值分配给类型为“MyClass::funcptr”的实体 但似乎defaultFunction应该将定义与函数指针相匹配。 我为此奋斗了一段时间,我很难理解这里的问题是什么。 感谢您的帮助 --MyClass.h-- --MyClass.cpp-- 换成 typedef std::function funcp

我有一个类,我想在构造时不带参数指向一个默认函数,但我想在传递一个带有其中一个参数的函数时更改该函数

我收到一个错误,无法将“类型为”int(MyClass::*)(int myVar)“的值分配给类型为“MyClass::funcptr”的实体 但似乎defaultFunction应该将定义与函数指针相匹配。 我为此奋斗了一段时间,我很难理解这里的问题是什么。 感谢您的帮助

--MyClass.h--

--MyClass.cpp--

换成

typedef std::function funcptr;
(顺便说一句,现在使用比使用typedef更惯用)以及

myfuncptr=[this](intx){returndefaultfunc(x);};

我尝试了函数指针typedefs和using的每一种组合,但最终我认为lambda是有效的。谢谢大家的帮助

--MyClass.h--

class-MyClass{
私人:
std::函数func;
int defaultFunc(int myVar);
公众:
MyClass(std::function func);
MyClass();
无效调用函数(int-myVar);
};
--MyClass.cpp--

MyClass::MyClass(){
this->func=[=](int a){return defaultFunc(a);};
};
MyClass::MyClass(std::function func;){
此->func=func;
};
void MyClass::callFunction(int myVar){
int i=func(myVar);
};
int-MyClass::defaultFunc(int-myVar){
返回myVar+3;
};

funcptr
是指向函数的指针
&MyClass::defaultFunc
(不是原始的
defaultFunc
,这是一个错误,Microsoft的非一致性编译器除外)是指向成员函数的指针。他们不一样。
class MyClass{
    private:
        typedef int (*funcptr)(const int myVar);
        funcptr myfuncptr;
        int defaultFunc(int myVar);
    public:
        MyClass(funcptr functionpointer);
        MyClass();
        void callFunction(int myVar);
        
};
MyClass::MyClass(){
    myfuncptr = defaultFunc; //a value of type "int (MyClass::*)(int myVar)" cannot be assigned to an entity of type "MyClass::funcptr"

};

MyClass::MyClass(funcptr functionpointer){
    myfuncptr = functionpointer;
};

void MyClass::callFunction(int myVar){
    int i = (*myfuncptr)(myVar);

};
int MyClass::defaultFunc(int myVar){
    return myVar + 3;
};
class MyClass{
    private:
        std::function<int(int)> func;
        int defaultFunc(int myVar);
    public:
        MyClass(std::function<bool(int)> func);
        MyClass();
        void callFunction(int myVar);
        
};
MyClass::MyClass(){
    this->func = [=] (int a) {return defaultFunc(a);};

};

MyClass::MyClass(std::function<int(int)> func;){
    this->func = func;
};

void MyClass::callFunction(int myVar){
    int i = func(myVar);

};
int MyClass::defaultFunc(int myVar){
    return myVar + 3;
};