Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在Arduino中进行结构的正向声明?_C++_Arduino - Fatal编程技术网

C++ 如何在Arduino中进行结构的正向声明?

C++ 如何在Arduino中进行结构的正向声明?,c++,arduino,C++,Arduino,想象一下这个精心设计的例子:(注意这是用于Arduino风格的C,而不是ANSI C): 使用此功能,我可以通过“向后”构建列表来构建两个节点的链接列表: 但是,如果我想做一个循环链表呢?这行不通: node nodeA = { 1, &nodeB }; node nodeB = { 2, &nodeA }; 因为nodeB没有在nodeA想要引用它的时候声明 我可以在运行时构建链接列表(动态分配节点,然后设置next链接)。但是有没有一种方法可以在编译时获得有效的转发声明呢?

想象一下这个精心设计的例子:(注意这是用于Arduino风格的C,而不是ANSI C):

使用此功能,我可以通过“向后”构建列表来构建两个节点的链接列表:

但是,如果我想做一个循环链表呢?这行不通:

node nodeA = { 1, &nodeB };
node nodeB = { 2, &nodeA };
因为nodeB没有在nodeA想要引用它的时候声明


我可以在运行时构建链接列表(动态分配节点,然后设置
next
链接)。但是有没有一种方法可以在编译时获得有效的转发声明呢?

这看起来像是一种非常普通的情况,在这种情况下,转发声明可以工作:

extern node nodeB;
node nodeA = { 1, &nodeB };
node nodeB = { 2, &nodeA };

一个普通的前瞻性参考会起作用吗?试着把“外部节点nodeB;”贴在前面。@SamVarshavchik:Gosh——是的,这很有效。我没有这样做,因为语言引用页()没有提到
extern
作为一种语言构造。我请你把你的评论变成一个答案……:)在C(但不是C++)中,您可以编写
节点nodeBas forward声明为什么要求在编译时设置循环链表?形式
nodeA.next=&nodeB
(定义了
nodeA
nodeB
之后)的简单赋值并不是很大的运行时开销。正如我提到的,这是一个人为的例子。我的实际用例涉及将更复杂的结构串在一起,并且考虑到Arduino的限制,我希望尽可能避免动态分配;命名空间{extern node nodeb;};命名空间{node nodeb;}
node nodeA = { 1, &nodeB };
node nodeB = { 2, &nodeA };
extern node nodeB;
node nodeA = { 1, &nodeB };
node nodeB = { 2, &nodeA };