嵌套的结构数组 - 我如何正确地为结构成员赋值?
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
?
【讨论】:
以上是关于嵌套的结构数组 - 我如何正确地为结构成员赋值?的主要内容,如果未能解决你的问题,请参考以下文章