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);
好吧所以这给了我一个空*不是一个指向对象的指针类型。我试图做的就是将void函数作为参数传递给我的构造函数。
答案 0 :(得分:6)
你有两个问题。
首先,您没有正确的函数指针语法。
函数指针的语法是
return_type(*name)(arguments)
由于您的函数具有void
返回类型且不接受任何参数,因此它是
void(*f)()
第二个是尝试将函数指针f
传递给基类构造函数
这里你将类型传递给基类,实际上你只想传递变量
不正确(在语法和传递参数类型方面)
Stepper(x,y,z,void(*f))
正确(只传递f
,函数指针变量本身
Stepper(x,y,z,f)
以下是包含修复程序的代码:
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);
答案 1 :(得分:1)
您忘了将空括号添加到函数指针:
void(*f)()
^^
no arguments
另外,Stepper(x,y,z,void(*f))
也是错误的,因为f
只是一个变量(如x
,y
和z
),所以为什么要把它投到void
?
Stepper(x, y, z, f); //'f' is just like a "normal" variable
答案 2 :(得分:1)
我习惯这样做:
Error: dims [product 619] do not match the length of object [618]
我声明了一个定义"函数模板"的typedef,很容易做到:
如果您的功能是(例如):
typedef void (TURRETSTEP)();
class Stepper
{
public:
Stepper(int en,int dir, int clk, TURRETSTEP* f)
{
}
};
class Turret : public Stepper
{
public:
Turret(int x,int y, int z, TURRETSTEP* f): Stepper(0, 0, 0, f)
{
}
};
void TurretStep()
{
}
只需用括号括起函数名称,并将其设为大写:
char* ReadString(int a, short b, int etc);
并添加typedef声明:
char* (READSTRING)(int a, short b, int etc);