类成员函数中调用指向同类成员的函数指针报错求助
问题分析与代码修正
错误原因
你遇到的错误存在两个核心问题:
- 成员函数指针调用语法错误:类的非静态成员函数指针必须通过类对象(或成员函数内部的
this指针)调用,直接写Result(20.2, 10)不符合语法要求——成员函数隐含this指针,必须明确指定调用对象。 - 函数签名不匹配:你传递的
&CLASS_A::Calculate是指向double(int)类型成员函数的指针,但Determine的参数声明为double(CLASS_A::*Result)(double, int),两者参数数量、类型完全不匹配,这也是编译报错的潜在问题。
修正后的完整代码
class CLASS_A { private: // 修正Calculate的签名,与成员函数指针类型匹配 double Calculate(double d, int weldPt); double Determine(double lb, double ub, double(CLASS_A::*Result)(double, int)); }; // 补全类声明末尾的分号 double CLASS_A::Calculate(double d, int weldPt) { double LB, UB; // ... double x = Determine(LB, UB, &CLASS_A::Calculate); // 此时签名匹配 // ... } double CLASS_A::Determine(double lb, double ub, double(CLASS_A::*Result)(double, int)) { // ... // 使用this指针调用成员函数指针,括号不可省略(操作符优先级问题) double X = (this->*Result)(20.2, 10); // ... }
关键修正点说明
- 类声明末尾分号:C++类声明必须以分号结尾,原代码遗漏会导致编译错误。
- 函数签名对齐:确保传递的成员函数指针与参数声明的类型完全一致,这里调整了
Calculate的参数列表,使其接受double和int两个参数,与Determine的函数指针参数匹配。 - 成员函数指针调用方式:在成员函数内部,使用
(对象->*函数指针)(参数)的语法调用成员函数指针;如果是直接操作对象实例,则用(对象.*函数指针)(参数)。括号必须加,因为函数调用的优先级高于->*/.*操作符,不加括号会导致语法解析错误。
内容的提问来源于stack exchange,提问作者IrwanHamid
相关产品推荐
相关产品推荐

