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