我试图在属于一个类并在另一类中调用的C ++中使用函数指针向量。例如:在类BoundaryCondition(文件BoundaryCondition.h)中,我将函数指针初始化为:
class BoundaryConditions{
public:
// Constructor function
BoundaryConditions(int id = 0);
vector <void (BoundaryConditions::*) (Face &, int, int)> func2bcond;
void fixedValue(Face &face, int id, int rkStep);
// and other functions with similar definition as fixedValue
}
在另一个类(DG.h)中,我初始化了一个BoundaryCondition实例数组,类似
BoundaryCondition *bcond;
,然后使用new(在DG.cpp文件中)将内存分配给bcond变量。对于每个bcond [i]实例,我需要将内存分配给函数指针,如下:
this->bcond[i].func2bcond.resize(totNoOfVariable);
我正在使用调整大小而不是推回,因为文件读取可能未按要求的顺序进行。接下来,根据边界条件文件,我将函数分配给该函数指针(同样在DG.cpp中):
bcond[i].func2bcond[j] = (&BoundaryConditions::fixedValue);
到目前为止,代码可以正常编译。尝试调用这些函数时出现错误。我称它为DG.cpp。代码如下:
(bcond[i].*func2bond[j])(f,1,2);
我一直收到以下错误:
error: 'func2bcond' was not declared in this scope
我很确定这仅是*或括号的位置,但是我被卡在这里,而且在stackoverflow上没有得到任何具体的解决方法。
预先感谢
答案 0 :(得分:0)
方法上的指针在调用时需要实例,因此您的代码可能类似于:
(bcond[i].*(bcond[i].func2bond[j]))(f, 1, 2);
或拆分表达式:
auto methodPtr = bcond[i].func2bond[j]; // auto is `void (BoundaryConditions::*) (Face &, int, int)`
(bcond[i].*methodPtr)(f, 1, 2);