【发布时间】:2020-07-17 15:57:22
【问题描述】:
如何在结构中使用函数指针,使用结构作为参数?
我有这个:
typedef struct button {
char SizeUnit;
char Status;
int Width;
int Height;
char *Text;
Color TextColor;
Color BGColor;
Color BorderColor;
int BorderWidth;
void (*ActionL)(button *bt);
void (*ActionR)(button *bt);
void (*ActionM)(button *bt);
void (*Hover) (button *bt);
void (*draw) (button *bt);
} button;
我怎样才能让它工作?
【问题讨论】:
-
我应该认为你只是写
struct button *?因为在遇到函数指针定义的时候,还没有遇到typedef。 (或者更确切地说,正在处理中。) -
要么使用@Peter 上面提到的
struct button *,要么先声明typedef,如下所示:typedef struct button button;struct button { ... };。 -
或者,停止对你的结构进行类型定义。 Typedef 非常适合函数类型和不透明类型,但坦率地说,它们在应用于结构时只是混淆。
-
您尝试伪造 C++ 风格的成员函数将导致意外的接口,因为以下是有效的调用:
buttonA->draw(buttonB);尽管在对象buttonA上被调用,但它确实会绘制buttonB。一个明智的电话buttonA->draw(buttonA);违反了不要重复自己的规则。