初始化一个普通的C结构
Initializing a vanilla C struct
我想在c++头文件中添加一个C风格的结构,并在C函数中使用它。但是这行不通:
struct Vertex {
float Position[2];
float Color[4];
};
struct Square{
Vertex vertices[4];
};
其他地方:
float color[4]={rColor, gColor, bColor, alpha};
float halfsize=(float)size/2;
Square square= {
{{halfsize,halfsize},{color[0],color[1],color[2],color[3]}},
{{halfsize,-halfsize},{color[0],color[1],color[2],color[3]}}, //error on this line
{{-halfsize,-halfsize},{color[0],color[1],color[2],color[3]}},
{{-halfsize,halfsize},{color[0],color[1],color[2],color[3]}}
};
在第二行报告"结构初始化项中有多余元素"。
在相关的注意事项上,是否有更有效的方法将数组color
传递到square
集?
您需要为Vertex vertices[4];
的初始化项添加一个额外的大括号
/
Square square= {{
{{halfsize,halfsize},{color[0],color[1],color[2],color[3]}},
{{halfsize,-halfsize},{color[0],color[1],color[2],color[3]}}, //error on this line
{{-halfsize,-halfsize},{color[0],color[1],color[2],color[3]}},
{{-halfsize,halfsize},{color[0],color[1],color[2],color[3]}}
}};
^
正如另一个回答者所提到的,您应该添加一个额外的大括号,然后事情就会正常工作。
但是,您还问这是否是传递color
的更有效的方法。
但是你说的有效率到底是什么意思?如果你的意思是"有没有一种执行速度更快的方法?"那么答案几乎肯定是否定的。这个初始化将非常快。
如果你的意思是"有没有一种方法可以用更少的代码行来编写?"那么答案可能还是否定的。六行太紧了
当然,你正在使用c++头,所以我认为你也必须使用c++编译器,所以在纯C中构建这部分代码似乎毫无意义。你可以使color
成为STL向量,然后为Square
和Vertex
构建一些构造函数,这些构造函数初始化了这个向量。它不会占用更多的代码,并且可以减少意外错误的概率。
或者,如果你设置在C语言上,并计划让这些代码一次又一次地出现,你可以考虑使用一个宏(如下所示,或者整个血腥的事情,但我想说,最好把它放在一个函数中):
#define RGB_INIT {color[0],color[1],color[2],color[3]}
相关文章:
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 静态结构和一个定义规则
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- 在学习数据结构之前对STL有一个了解是好的吗?
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 从另一个 cpp 文件更改结构内、映射键内的变量
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- 使用完数据结构后清空数据结构是一个好习惯吗?
- 如何制作一个地图,其中的值是C++中的结构数组
- 如何将数据从一个结构链接到另一个结构
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- error dllimport 函数的定义不允许在一个特定的联合中,而其他类、结构和联合将按预期导出
- std::transform 将一个结构数组复制到另一个结构数组
- C++:如何做一个链表,结构作为参数传递?
- 输入 ctrl + x 后如何再次 cin (cin<<x) 循环(cin 一个结构)
- 两个附带的类层次结构-一个好的设计模式