首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建常量结构数组

如何创建常量结构数组
EN

Stack Overflow用户
提问于 2014-04-15 09:38:47
回答 2查看 9.5K关注 0票数 2

我希望能够轻松地创建带有特定信息的常量结构,所以我决定声明并初始化它们“一次一行”,这样我就可以在需要时简单地添加新的常量结构。这可以很好地工作,但是我如何创建某种类型的数组来访问这些常量结构?我尝试了以下方法,但不起作用。

代码语言:javascript
复制
typedef struct
{
    int numOfNotes;
    char *arpName;
    double freqRatios[12];
} ARPINFO;

const ARPINFO majorArp = {3,"Major Arpeggio",{0.0,JUST_MAJ_3,JUST_PERF_5}};
const ARPINFO minorArp = {3,"Minor Arpeggio",{0.0,JUST_MIN_3,JUST_PERF_5}};

const ARPINFO arpInfoArray[2] = {majorArp,minorArp}; // ERROR HERE

如果我可以使用这种方式来组织我的结构,我只需要改变数组的大小,并在每次创建新的常量结构时将新的常量结构添加到数组中。

还是说我已经偏离正轨了?枚举或宏对我有帮助吗?

编辑: freqRatios是用宏定义的,我知道最初的0.0可能是多余的……

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-15 09:49:28

具有静态存储持续时间的变量必须在C中具有编译时常量初始化器,并且另一个变量不会被算作编译时常量(即使该变量是const)。

你可以这样写:

代码语言:javascript
复制
#define MAJOR_ARP {3,"Major Arpeggio",{0.0,JUST_MAJ_3,JUST_PERF_5}}
#define MINOR_ARP {3,"Minor Arpeggio",{0.0,JUST_MIN_3,JUST_PERF_5}}

const ARPINFO majorArp = MAJOR_ARP;
const ARPINFO minorArp = MINOR_ARP;

const ARPINFO arpInfoArray[2] = { MAJOR_ARP, MINOR_ARP };

请注意,这里有两份数据副本。如果您可以让数据的一个副本和其他静态变量引用它,那么您可以这样做:

代码语言:javascript
复制
const ARPINFO *const arpInfos[2] = { &majorArp, &minorArp };
票数 5
EN

Stack Overflow用户

发布于 2014-04-15 09:49:59

你应该描述你得到的错误。尝试自己编译它的结果是:

代码语言:javascript
复制
main.cpp:14:33: error: initializer element is not a compile-time constant
const ARPINFO arpInfoArray[2] = {majorArp,minorArp}; // ERROR HERE
                                ^~~~~~~~~~~~~~~~~~~

它的解决方案是:

代码语言:javascript
复制
const ARPINFO arpInfoArray[2] = {
  {3,"Major Arpeggio",{0.0,JUST_MAJ_3,JUST_PERF_5}},
  {3,"Minor Arpeggio",{0.0,JUST_MIN_3,JUST_PERF_5}}
};
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23073233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档