C前言

时间:2016-10-15 22:07:36

标签: c

(注意:这是纯粹的C / Arduino)。

我发现了很多链接我的问题,但没有人回答我。

我有一个文件“Effects.h”和“Keyboard.h”。

Keyboard.h需要以包含“Effects.h”。因此“Effects.h”不能包含“Keyboard.h

在“Effects.h”中我已经完成了这三个功能:

extern fnKeyPress effectDrops();
extern fnKeyPress effectLineRotate();
extern fnKeyPress effectRainbowCycle();

它们都应该返回一个指向带有这两个参数的函数的指针:const KeyWithColor *, const struct KeyConfiguration *

所以我试图这样做:

typedef void (*fnKeyPress)(const KeyWithColor *, const struct KeyConfiguration *);
extern fnKeyPress effectDrops();
extern fnKeyPress effectLineRotate();
extern fnKeyPress effectRainbowCycle();

但是它不起作用,因为它说:

Effects.h:32: error: 'KeyWithColor' does not name a type
 typedef void (*fnKeyPress)(const KeyWithColor *, const struct KeyConfiguration *);

解决方法是什么?

1 个答案:

答案 0 :(得分:2)

如果你需要转发声明KeyWithColor和(可能)KeyConfiguration:

(我不知道你的KeyWithColor类型是否是一个结构,我会认为它是为了简单起见)

然后放置:

struct KeyWithColor;
struct KeyConfiguration;

高于此:

typedef void (*fnKeyPress)(const KeyWithColor *, const struct KeyConfiguration *);
extern fnKeyPress effectDrops();
extern fnKeyPress effectLineRotate();
extern fnKeyPress effectRainbowCycle();

执行此操作,您还可以在注释中指出类型。基本上告诉编译器:

  

你还不知道,但我保证会定义

小心不要在前向声明中加入任何类型的实现。