[英]Excess elements in struct initializer when nested std::array
我在以下return
行的Excess elements in struct initializer
獲取了Excess elements in struct initializer
:
using triangleColor = std::array<std::array<float, 4>, 3>;
triangleColor colorBlend(TriangleColorBlend c){
switch (c) {
case TriangleColorBlend::white:
return {{1.0,1.0,1.0,1.0},{0.7,0.7,0.7,1.0},{0.5,0.5,0.5,1.0}};
break;
... // other cases
}
}
我希望花括號文字能夠以嵌套的方式工作,因為如果我只使用一個std :: array而不是嵌套,它可以正常工作。
以上根本不可能,為什么不呢?
注意,建議的副本並沒有真正解決嵌套情況下std :: array的奇怪行為。
triangleColor colorBlend(TriangleColorBlend c) {
switch (c) {
case TriangleColorBlend::white:
return {{
{{ 1.0f, 1.0f, 1.0f, 1.0f }},
{{ 0.7f, 0.7f, 0.7f, 1.0f }},
{{ 0.5f, 0.5f, 0.5f, 1.0f }}
}};
default:
throw std::invalid_argument("c");
}
}
您的代碼存在兩個問題:
colorBlend
沒有默認情況的返回值。 你缺少一組括號。
return {{1.0,1.0,1.0,1.0},{0.7,0.7,0.7,1.0},{0.5,0.5,0.5,1.0}};
應該
return {{{1.0,1.0,1.0,1.0},{0.7,0.7,0.7,1.0},{0.5,0.5,0.5,1.0}}};
你可以看到它在這個最小的例子中工作
另一項工作:
triangleColor colorBlend(TriangleColorBlend c){
using t1 = std::array<float, 4>;
switch (c) {
case TriangleColorBlend::white:
return {t1{1.0,1.0,1.0,1.0},t1{0.7,0.7,0.7,1.0},t1{0.5,0.5,0.5,1.0}};
break;
default:
break;
}
return triangleColor{};
}
對於為什么這個問題的答案
return {{1.0,1.0,1.0,1.0},{0.7,0.7,0.7,1.0},{0.5,0.5,0.5,1.0}};
不起作用可以在https://stackoverflow.com/a/8192275/434551找到:
std::array
是C ++ 11規則的聚合,因此可以通過聚合初始化來創建。 要聚合初始化結構內的數組,需要第二組花括號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.