嵌套 std::array 时结构初始值设定项中的多余元素

joh*_*ers 6 c++ c++11

我得到Excess elements in struct initializerreturn下面的一行:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望花括号文字能够以嵌套方式工作,因为如果我只使用一个 std::array 而不是嵌套就可以正常工作。

以上根本不可能,为什么不呢?

请注意,建议的副本并没有真正解决嵌套情况下 std::array 的奇怪行为。

ild*_*arn 6

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

Online Demo

您的代码有两个问题:

  1. 您缺少内部数组的大括号。
  2. 正如@Praetorian 所指出的,colorBlend默认情况下没有返回值。