无法初始化阵列错误C2440:' =' :无法转换为初始化列表'到了#abd'

时间:2014-08-13 22:00:19

标签: c++ visual-studio-2013

嗨,我有类似的东西:

enum abd {a,b,c};

class d { 
  private: 
    abd tab[3][3]; 
  public: 
    d() { 
      tab[3][3] = { {a,a,a}, {a,a,a}, {a,a,a} }; 
    } 
}

它大喊:

  

错误C2440:'=':无法从'initializer-list'转换为'abd'和   IntelliSense:初始化值太多。

我可能是瞎子,因为我找不到我的错误所以请告诉我什么是错的以及如何修复它。

3 个答案:

答案 0 :(得分:2)

class d { 
  private: 
    abd tab[3][3]; 
  public: 
    d() : tab { {a,a,a}, {a,a,a}, {a,a,a}} {} 
};

<强>更新

似乎在使用

    d() : tab { {a,a,a}, {a,a,a}, {a,a,a}} {} 

是VS 2013中的问题。请参阅the bug report

如果不支持,我能想到的唯一选择就是使用嵌套的for循环来初始化tab

d()
{
   for ( int i = 0; i < 3; ++i )
      for ( int j = 0; j < 3; ++j )
         tab[i][j] = a;
} 

答案 1 :(得分:2)

此事{ {a,a,a}, {a,a,a}, {a,a,a} }称为初始化列表,因为您只能在数组的初始化中使用它。

abd tab[3][3] = { {a,a,a}, {a,a,a}, {a,a,a} };

答案 2 :(得分:1)

数组没有赋值运算符。你可以改写

class d { 
  private: 
    abd tab[3][3] = { {a,a,a}, {a,a,a}, {a,a,a} }; 
  public: 
    d() { 
    } 
};

如果编译器不支持此功能,则使用一些标准算法,例如std::fill,为数组的元素赋值。

例如

#include <algorithm>

enum abd  { a, b, d };

    class d { 
      private: 
        abd tab[3][3]; 
      public: 
        d() {
            std::fill( reinterpret_cast<abd *>( tab ), 
                       reinterpret_cast<abd *>( tab ) + 9,
                       a );         
        } 
    };
i