C++ 函数指针-类内部和外部
我是函数指针的noob,这是我第一次使用它 代码是:C++ 函数指针-类内部和外部,c++,function,pointers,function-pointers,C++,Function,Pointers,Function Pointers,我是函数指针的noob,这是我第一次使用它 代码是: #include "time.cpp" int main(){ double** matrix= new double*[10]; for (int i=0; i<10; i++) matrix[i]=new double[10]; gear nit; nit.roll(&matrix[0]); } 当我将pfunc分配给脉冲a时,我得到 错误:类型为“double(档位:)(double,double)”的参数与“d
#include "time.cpp"
int main(){
double** matrix= new double*[10];
for (int i=0; i<10; i++) matrix[i]=new double[10];
gear nit;
nit.roll(&matrix[0]);
}
当我将pfunc分配给脉冲a时,我得到
错误:类型为“double(档位:)(double,double)”的参数与“double(*)(double,double)”不匹配
对于double(*pfunc)(double,double)=脉冲a代码>
当我将pfunc分配给脉冲_b时,我得到了对啁啾的未定义的参考(double,double)
对于double(*pfunc)(double,double)=脉冲b代码>
我做错了什么?任何事情都不要使用函数指针。像正常人一样使用std::function
此外,成员函数不是也永远不能是函数指针。它必须是一个静态函数。您选择了一个极其复杂的示例作为您第一次尝试函数指针的例子。你应该从你能想到的最简单的例子开始
你的第一个指针
double (*pfunc)(double,double)=pulse_a;
按书面形式工作。它不会产生你描述的错误;我不知道它怎么可能产生您描述的错误(因为它不涉及gear
),所以我打赌您发布的代码不是产生错误的代码。请不要那样做
指向函数的指针和指向成员函数的指针是不同的动物。它们有不同的类型,不能互换。不要试图把一个扔给另一个,否则你将违反古老的部落法(你将得到未定义的行为)
一旦掌握了这些指针的诀窍,您就可以通过typedef
为自己省去一些麻烦:
typedef double (gear::*gearMemFn)(double, double);
void dynamics2(gearMemFn, double** , double, double);
...
gearMemFn pfunc2=&gear::pulse_b;
这就是确切的错误:/tmp/ccy2DvIL.o:函数'gear::roll(double**):/home/user/dir/time.cpp:13:未定义对'pulse_a(double,double)'集合的引用2:ld返回了我正在使用的1个退出状态,g++版本4.5.1 20101208(SUSE Linux),感谢您解释有关成员函数的详细信息。它解决了问题,没关系。我刚刚声明了函数,没有定义它。我的错。
void dynamics2(double (gear::*)(double, double), double** , double, double);
...
double (gear::*pfunc2)(double,double) = &gear::pulse_b;
dynamics2(pfunc2,&matrix[0],t,dt);
typedef double (gear::*gearMemFn)(double, double);
void dynamics2(gearMemFn, double** , double, double);
...
gearMemFn pfunc2=&gear::pulse_b;