簡體   English   中英

嵌套std :: array時struct initializer中的多余元素

[英]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");
    }
}

在線演示

您的代碼存在兩個問題:

  1. 你內部數組缺乏大括號。
  2. 如@Praetorian所述, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM