(注意:这是纯粹的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 *);
解决方法是什么?
答案 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();
执行此操作,您还可以在注释中指出类型。基本上告诉编译器:
你还不知道,但我保证会定义
小心不要在前向声明中加入任何类型的实现。