[英]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]}}
};
在第二行報告“struct initializer中的多余元素”。
在相關的說明中,是否有更有效的方法將數組color
傳遞給square
集?
你需要為Vertex vertices[4];
的初始化器添加一個額外的括號 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 ++標頭,所以我認為你也必須使用C ++編譯器,因此在純C中構建這部分代碼似乎毫無意義。你可以將color
變成STL向量然后構建一些構造函數用於初始化此向量的Square
和Vertex
。 它不會占用更多的代碼,並可能減少意外錯誤的可能性。
或者,如果您設置為C並計划一次又一次地出現此代碼,您可以考慮使用宏(如下所示,或者對於整個血腥的東西,但是我會說它會更好把它放在一個函數中):
#define RGB_INIT {color[0],color[1],color[2],color[3]}
雖然宏確實有它們的危險。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.