今天再一次重新键入..
在结构中是指向函数的指针,在此函数中,我希望能够处理此结构中的数据,因此将结构的指针作为参数给出。
这个问题的演示
#include <stdio.h>
#include <stdlib.h>
struct tMYSTRUCTURE;
typedef struct{
int myint;
void (* pCallback)(struct tMYSTRUCTURE *mystructure);
}tMYSTRUCTURE;
void hello(struct tMYSTRUCTURE *mystructure){
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
}
int main(void) {
tMYSTRUCTURE mystruct;
mystruct.pCallback = hello;
mystruct.pCallback(&mystruct);
return EXIT_SUCCESS;
}
但我得到警告
预期为“struct tMYSTRUCTURE *”,但为“struct tMYSTRUCTURE *”,很有趣!
任何想法如何解决它?
最佳答案
问题是由typedef
编码结构,然后使用struct
关键字以及typedef
名称引起的。向前声明struct
和typedef
都可以解决此问题。
#include <stdio.h>
#include <stdlib.h>
struct tagMYSTRUCTURE;
typedef struct tagMYSTRUCTURE tMYSTRUCTURE;
struct tagMYSTRUCTURE {
int myint;
void (* pCallback)(tMYSTRUCTURE *mystructure);
};
void hello(tMYSTRUCTURE *mystructure){
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
}
int main(void) {
tMYSTRUCTURE mystruct;
mystruct.pCallback = hello;
mystruct.pCallback(&mystruct);
return EXIT_SUCCESS;
}