[英]How to solve a problem with circular dependancy in C and function pointers
|在程序中,我将此结构与函数指针一起使用,但是我想对其进行更改,以便可以用一个语句来保存,恢复和替换函数指针。
typedef struct MenuStr
{
// more elements
uint8_t (*ButtonUpPtr)(struct MenuStr *Menu);
uint8_t (*ButtonDownPtr)(struct MenuStr *Menu);
uint8_t (*ButtonLeftPtr)(struct MenuStr *Menu);
uint8_t (*ButtonRightPtr)(struct MenuStr *Menu);
uint8_t (*PreMenuCursorPtr)(struct MenuStr *Menu);
uint8_t (*MenuCursorPtr)(struct MenuStr *Menu);
uint8_t (*PostMenuCursorPtr)(struct MenuStr *Menu);
// more elements
}MENU;
因此,我想将以上内容更改为允许使用一个语句复制所有指针。
typedef struct Cursorstr
{
uint8_t (*ButtonUpPtr)(struct MenuStr *Menu);
uint8_t (*ButtonDownPtr)(struct MenuStr *Menu);
uint8_t (*ButtonLeftPtr)(struct MenuStr *Menu);
uint8_t (*ButtonRightPtr)(struct MenuStr *Menu);
uint8_t (*PreMenuCursorPtr)(struct MenuStr *Menu);
uint8_t (*MenuCursorPtr)(struct MenuStr *Menu);
uint8_t (*PostMenuCursorPtr)(struct MenuStr *Menu);
}CURSOR_STR;
typedef struct MenuStr
{
// more elements
CURSOR_STR Elements;
// more elements
}MENU;
现在,我遇到了指针参数的问题,找不到解决方案。 感谢协助
您必须向前声明MENU
结构。 在CURSOR_STR
的声明之前添加以下内容:
typedef struct MenuStr MenuStr;
所有这一切都是为了告诉编译器程序中将有一个名为MenuStr
的结构,但稍后会对其进行定义。
还可以考虑将typedef用于函数指针。 完整示例:
typedef struct MenuStr MenuStr;
typedef uint8_t ButtonFunc (MenuStr*);
typedef struct Cursorstr
{
ButtonFunc* ButtonUpPtr;
ButtonFunc* ButtonDownPtr;
ButtonFunc* ButtonLeftPtr;
ButtonFunc* ButtonRightPtr;
ButtonFunc* PreMenuCursorPtr;
ButtonFunc* MenuCursorPtr;
ButtonFunc* PostMenuCursorPtr;
}CURSOR_STR;
typedef struct MenuStr
{
// more elements
CURSOR_STR Elements;
// more elements
}MENU;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.