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

标签 c++ c++11

我在下面的 return 行中得到 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");
    }
}

Online Demo

您的代码有两个问题:

  1. 您缺少内部数组的支撑。
  2. 如@Praetorian 所述,colorBlend 在默认情况下没有返回值。

关于c++ - 嵌套 std::array 时结构初始值设定项中的多余元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35021112/

相关文章:

c++ - C++中的重载

c++ - 如何避免 lambda 函数中的隐式移动构造函数

c++ - C++中的synchronized是什么意思

c++ - 我用 C++ 编写的文件中有更多字符

java - 请解释为什么在 Cpp、Java 和 C# 中允许或不允许将 List<A> 转换为 List<A.super>

c++ - 是否有可能避免在 C++ 中链接标准库

c++ - 从 DLL 函数调用非 DLL 函数

c++ - 使用reverse_iterator STL错误解密upper_bound

linux - 使用在双引号中包含空格的参数调用 std::system

c++ - 如何为现有对象填充接口(interface)?