【问题标题】: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(或任何其他原始类型)是一种悲观。按值传递它们。

标签: c++ arrays struct variable-assignment


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    也许mode 不应该标记为static

    【讨论】:

      猜你喜欢
      • 2015-12-20
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 2017-05-11
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      相关资源
      最近更新 更多