我如何在c ++中将函数作为参数传递

Dal*_*ore 4 c++ parameters function arduino parameter-passing

class Stepper
{
public:
  Stepper(int en,int dir, int clk, void(*f))
  {

  }
};
class Turret : public Stepper
{
public:
  Turret(int x,int y, int z,void (*f)):Stepper(x,y,z,void(*f))
  {
  }
};
void TurretStep()
{

}
Turret t(2,3,4,TurretStep);
Run Code Online (Sandbox Code Playgroud)

好吧所以这给了我一个空*不是指向对象的类型.我要做的就是将void函数作为参数传递给我的构造函数.

Ste*_*mer 6

你有2个问题.

第一个是你没有函数指针的正确语法.

函数指针的语法是

return_type(*name)(arguments)
Run Code Online (Sandbox Code Playgroud)

由于你的函数有void返回类型而且不带任何参数,所以它是

void(*f)()
Run Code Online (Sandbox Code Playgroud)

第二个是尝试将函数指针传递f给基类构造函数

在这里,您将类型传递给基类,而实际上您只想传递变量

不正确(在语法和传递参数类型方面)

Stepper(x,y,z,void(*f)) 
Run Code Online (Sandbox Code Playgroud)

正确(只是传递f,函数指针变量本身

Stepper(x,y,z,f)
Run Code Online (Sandbox Code Playgroud)

以下是修复的代码:

class Stepper
{
public:
  Stepper(int en,int dir, int clk, void(*f)())
  {

  }
};
class Turret : public Stepper
{
public:
  Turret(int x,int y, int z,void (*f)()):Stepper(x,y,z,f)
  {
  }
};
void TurretStep()
{

}
Turret t(2,3,4,TurretStep);
Run Code Online (Sandbox Code Playgroud)