首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C远期报关

C远期报关
EN

Stack Overflow用户
提问于 2016-10-15 22:07:36
回答 1查看 85关注 0票数 2

(注:这是纯C/ Arduino)。

我发现我的问题有很多联系,但没有人回答我。

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

"Keyboard.h“需要包括"Effects.h”。所以"Effects.h“不能包括"Keyboard.h

在"Effects.h“中,我实现了这三个函数:

代码语言:javascript
复制
extern fnKeyPress effectDrops();
extern fnKeyPress effectLineRotate();
extern fnKeyPress effectRainbowCycle();

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

所以我想这么做:

代码语言:javascript
复制
typedef void (*fnKeyPress)(const KeyWithColor *, const struct KeyConfiguration *);
extern fnKeyPress effectDrops();
extern fnKeyPress effectLineRotate();
extern fnKeyPress effectRainbowCycle();

但是不起作用,因为上面写着:

代码语言:javascript
复制
Effects.h:32: error: 'KeyWithColor' does not name a type
 typedef void (*fnKeyPress)(const KeyWithColor *, const struct KeyConfiguration *);

解决办法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-15 22:39:52

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

(我不知道您的KeyWithColor类型是否是一个结构,我将假设它是为了简单起见)

然后放置这个:

代码语言:javascript
复制
struct KeyWithColor;
struct KeyConfiguration;

在此之上:

代码语言:javascript
复制
typedef void (*fnKeyPress)(const KeyWithColor *, const struct KeyConfiguration *);
extern fnKeyPress effectDrops();
extern fnKeyPress effectLineRotate();
extern fnKeyPress effectRainbowCycle();

这样做,您也是转发声明类型,如注释中所指出的。基本上告诉编译器:

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

小心不要把任何一种执行都放在前面的声明中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40064731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档