我需要使用一些带有附加布尔标志的函数指针。 我尝试过以下内容,但不会编译。 有人可以帮忙吗?
int handler1(int mix) {
...
return 0;
}
int handler2(int mix) {
...
return 0;
}
int handler3(int mix) {
...
return 0;
}
typedef int (*my_handler)(int mix);
typedef struct {
my_handler handler,
bool mix_handler,
} handle_pair;
static handler_pair handlers[] = {
{ handler1, FALSE },
{ handler2, TRUE },
{ handler3, FALSE },
{ NULL, FALSE },
};
答案 0 :(得分:1)
我的猜测是这些线条会给你一个问题:
typedef struct {
my_handler handler,
bool mix_handler,
} handle_pair;
您应该使用;
结束声明,即使在结构中也是如此。像这样:
typedef struct {
my_handler handler;
bool mix_handler;
} handle_pair;
此外,您键入名称handle_pair
但声明类型为handler_pair
的数组。 “处理”或“处理程序”?
答案 1 :(得分:1)
你的struct typedef是错误的,你用分号分隔声明,而不是像普通代码那样用结构声明中的逗号分隔。
应该是:
typedef struct {
my_handler handler;
bool mix_handler;
} handle_pair;
如果我注释掉......行,并将以下内容粘贴在文件的头部:
#include <stdbool.h>
#include <unistd.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
并在静态声明中将handler_pair
更改为handle_pair
,它会编译。
答案 2 :(得分:0)
试试这个:
#include <cstdio>
int handler1(int mix) {
//...
return 0;
}
int handler2(int mix) {
//...
return 0;
}
int handler3(int mix) {
//...
return 0;
}
typedef int (*my_handler)(int mix);
typedef struct {
my_handler handler;
bool mix_handler;
} handle_pair;
static handle_pair handlers[] = {
{ handler1, false },
{ handler2, true },
{ handler3, false },
{ NULL, false },
};
下次显示错误并指定编译器,操作系统等。这是使用VisualC ++ 9测试的