我在以下Excess elements in struct initializer
行中获得了return
:
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的奇怪行为。
答案 0 :(得分:4)
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
没有默认案例的返回值。答案 1 :(得分:2)
您缺少一组括号。
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}}};
您可以在此minimal example
中看到它正常工作答案 2 :(得分:2)
另一种解决方法:
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规则的聚合,因此可以通过聚合初始化来创建。要聚合初始化结构中的数组,需要第二组花括号。