【发布时间】:2018-01-02 01:45:52
【问题描述】:
我已经阅读了很多关于指向非静态成员函数的帖子和答案,但似乎没有一个能够解决我的问题。
所以我创建了一个简短的例子来复制我的问题:即使这个例子可以用不同的方式“解决”,对于最终的软件来说,保持例子中的结构很重要,谢谢。
这是“Funcs.h”类的头文件:
class Funcs
{
private:
double a = 1, b = 2;
public:
Funcs();
~Funcs();
double Fun1(double X);
double solver(double X0);
double aaa(double(*fun)(double), double x0);
};
这是“Funcs.cpp”类的cpp:
#include "Funcs.h"
using namespace std;
Funcs::Funcs()
{
}
Funcs::~Funcs()
{
}
double Funcs::Fun1(double X) {
double f1 = a*X;
return f1;
}
double Funcs::solver(double X0)
{
double result;
result = aaa(Fun1, X0);
return result;
}
double Funcs::aaa(double(*fun)(double), double x0)
{
return fun(x0);
}
最后这是主要的“main.cpp”:
#include <iostream>
#include "Funcs.h"
using namespace std;
int main() {
double x0=1;
double result;
Funcs funcs;
result = funcs.solver(x0);
cout << result << endl;
return 0;
}
当我调用“result = aaa(Fun1, X0);”时,错误出现在 Funcs::solver 方法中因为我不能使用指向 Fun1 的指针,因为它是一个非静态成员。同时不能将其设为静态,否则在静态方法中看不到变量“a”。
提前感谢您的帮助。
【问题讨论】:
-
那么你到底能改变什么?作为成员函数的某些东西与常规函数不同。
-
@NathanOliver ,对于我在其他帖子中看到的内容,我应该更改将第一个参数传递给函数“aaa(Fun1, X0);”的方式,这与编译器要求的相同,但我尝试过的一切都不起作用......
-
您不能将成员函数指针转换为常规函数指针。您要么必须更改
aaa接受的内容,要么将Fun1设为静态才能按原样使用aaa。
标签: c++ function-pointers non-static