嵌套的结构数组 - 我如何正确地为结构成员赋值?

Posted

技术标签:

【中文标题】嵌套的结构数组 - 我如何正确地为结构成员赋值?【英文标题】:Nested array of structs - how do i properly assign a value to struct members? 【发布时间】:2021-07-15 08:13:50 【问题描述】:

我有

struct Voice 
  static byte mode;
  //Some other stuff
;

byte Voice::mode;   //Static member defined outside of struct declaration

struct DataPacket 
    DataPacket() : sequencer, voice, tempdata ;
    
    Sequencer sequencer;
    Voice voice[4];
    Tempdata tempdata;
;

我想为数组中的 一个 分配一个变量值,如下所示:

DataPacket assignVoiceValues(const InputPacket &inputPacket,
                             DataPacket &dataPacket,
                             const byte &voiceNumber) 
  dataPacket.voice[voiceNumber].mode = (byte) inputPacket.finalPotvalue[0];

  //Other code

即使这样编译,当我测试代码时,voice[] 数组中的四个结构成员 mode 的代码全部同时分配有 inputPacket.finalPotvalue[0]。没有代码可以将值分配给其他可能干扰的dataPacket.voice[voiceNumber].mode

我不知道为什么会这样。我错过了什么,让它按预期工作的正确语法是什么?

(我知道通常建议使用向量而不是数组,但该代码适用于内存有限的 arduino 板)。

【问题讨论】:

请提供minimal reproducible example,最好不要水平滚动。 发生这种情况是因为您将成员设为静态。你为什么把它变成静态的? 附带说明,通过 const 引用传递 byte(或任何其他原始类型)是一种悲观。按值传递它们。 【参考方案1】:

由于您声明变量“mode”静态,它绑定到您的类(它是单一的),而不是您的类的实例(您可以创建很多实例)。

要解决此问题,只需从变量描述中删除静态

https://en.cppreference.com/w/cpp/language/static

【讨论】:

【参考方案2】:

您已将模式定义为static byte mode;...所以在整个程序中为其中一个分配了空间。

也许mode 不应该标记为static

【讨论】:

以上是关于嵌套的结构数组 - 我如何正确地为结构成员赋值?的主要内容,如果未能解决你的问题,请参考以下文章

golang中级进阶(二):结构体

结构体赋值给数组

C中结构体内有一个成员是二维数组,可以直接赋值另一个一维数组吗?

如何将结构数组里的两个成员位置交换

C语言怎么给结构体里的结构体赋值?

如何创建一个结构连接行作为嵌套文档 PostgreSQL