Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.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++_Arrays_Member Function Pointers - Fatal编程技术网

C++ 为什么可以';我不能访问数组中成员函数的指针吗?

C++ 为什么可以';我不能访问数组中成员函数的指针吗?,c++,arrays,member-function-pointers,C++,Arrays,Member Function Pointers,我有一个带有指向类方法的指针数组的类。然而,在这个类中,当我试图调用数组中的一个函数时,我得到了一个错误。以下是相关代码: class MyClass { typedef void(MyClass::*FunctionPointer)(size_t *i); void func1(size_t *i) { } void func2(size_t *i) { } void func3(size_t *i) { } void func4(size_t *i) { } FunctionPointer

我有一个带有指向类方法的指针数组的类。然而,在这个类中,当我试图调用数组中的一个函数时,我得到了一个错误。以下是相关代码:

class MyClass
{
typedef void(MyClass::*FunctionPointer)(size_t *i);
void func1(size_t *i) { }
void func2(size_t *i) { }
void func3(size_t *i) { }
void func4(size_t *i) { }

FunctionPointer myFuncs[4] = { func1, func2, func3, func4 };
const std::string funcList[4] = { "FUNC1", "FUNC2", "FUNC3", "FUNC4" };

void doFunc(std::string in)
{
   size_t *j = 0;
   for (size_t i = 0; i < 4; ++i)
   {
      if (in == funcList[i]) { this->myFuncs[i](j); }           
   }
}
};
class-MyClass
{
typedef void(MyClass::*函数指针)(大小_t*i);
void func1(size_t*i){}
void func2(size_t*i){}
void func3(size_t*i){}
void func4(size_t*i){}
FunctionPointer myFuncs[4]={func1,func2,func3,func4};
常量std::字符串funcList[4]={“FUNC1”、“FUNC2”、“FUNC3”、“FUNC4”};
void doFunc(标准::字符串输入)
{
尺寸_t*j=0;
对于(尺寸i=0;i<4;++i)
{
如果(in==funcList[i]){this->myFuncs[i](j);}
}
}
};
我试着省略“this->”和“this->*”,但没有任何效果。我得到的错误是“显然调用的括号前面的表达式必须具有(指向-)函数类型。”根据互联网,这意味着我试图调用未定义为函数的东西。但我很确定我是?
谢谢

如果您遵循正确的语法,您可以这样做;) 使用以下命令获取方法的地址:

&MyClass::func1
然后,要解析函数指针,请执行以下操作:

(此->*myFuncs[i])
或者全部

class-MyClass
{
typedef void(MyClass::*函数指针)(大小_t*i);
void func1(size_t*i){}
void func2(size_t*i){}
void func3(size_t*i){}
void func4(size_t*i){}
FunctionPointer myFuncs[4]={&MyClass::func1,&MyClass::func2,&MyClass::func3,&MyClass::func4};
常量std::字符串funcList[4]={“FUNC1”、“FUNC2”、“FUNC3”、“FUNC4”};
void doFunc(标准::字符串输入)
{
尺寸_t*j=0;
对于(尺寸i=0;i<4;++i)
{
if(in==funcList[i]){(this->*myFuncs[i])(j);}
}
}
};

如果您遵循正确的语法,则可以执行此操作;) 使用以下命令获取方法的地址:

&MyClass::func1
然后,要解析函数指针,请执行以下操作:

(此->*myFuncs[i])
或者全部

class-MyClass
{
typedef void(MyClass::*函数指针)(大小_t*i);
void func1(size_t*i){}
void func2(size_t*i){}
void func3(size_t*i){}
void func4(size_t*i){}
FunctionPointer myFuncs[4]={&MyClass::func1,&MyClass::func2,&MyClass::func3,&MyClass::func4};
常量std::字符串funcList[4]={“FUNC1”、“FUNC2”、“FUNC3”、“FUNC4”};
void doFunc(标准::字符串输入)
{
尺寸_t*j=0;
对于(尺寸i=0;i<4;++i)
{
if(in==funcList[i]){(this->*myFuncs[i])(j);}
}
}
};

谢谢!我曾尝试用“*”取消对函数的引用,但没有括号。谢谢!我曾尝试用“*”解除对函数的引用,但没有括号。