我有一个C cfg_struct
,其中包含有关如何评估某些数据的信息。为避免评估代码中出现switch
,我将正确的评估函数分配给结构本身。
//Some evaluation function
int eval2(cfg_struct* cfg, int*data);
int eval3(cfg_struct* cfg, int*data);
int eval4(cfg_struct* cfg, int*data);
... and so on
然后结构应该是这样的:
struct cfg_struct
{
int rule;
...
int(*eval_fn)(cfg_struct *cfg, int* data);
};
错误:
error: unknown type name 'cfg_struct'
我试过预定义它,但可以吗?
//My "predefinition":
typedef struct cfg_struct;
答案 0 :(得分:2)
在使用之前定义类型:
typedef struct cfg_struct ca_cfg_t;
struct cfg_struct
{
int rule;
...
int(*eval_fn)(ca_cfg_t *cfg, int *data);
};
或者在结构中使用struct
表示法:
struct cfg_struct
{
int rule;
...
int(*eval_fn)(struct cfg_struct *cfg, int *data);
};
typedef struct cfg_struct ca_cfg_t;
您似乎对何时放弃struct
感到困惑。在C(与C ++不同)中,您必须提供明确的typedef
或继续使用struct tag
。因此,您的evalX()
函数需要以下其中一项:
typedef struct cfg_struct cfg_struct;
int eval2(cfg_struct *cfg, int *data);
或:
int eval2(ca_cfg_t *cfg, int *data);
或:
int eval2(struct cfg_struct *cfg, int *data);
(在C ++中,只要struct
(或typedef
),您就可以将标记名称用作不带struct cfg_struct
前缀的类型名称而不使用显式class cfg_struct
已经出现在某个地方。但这不是C的一部分。)