【问题标题】:Workaround for error C2536: cannot specify explicit initializer for arrays in Visual Studio 2013错误 C2536 的解决方法:无法在 Visual Studio 2013 中为数组指定显式初始化程序
【发布时间】:2013-11-09 15:41:36
【问题描述】:

以下代码无法使用 Visual Studio 2013 编译,但它应该:

class A
{
    A() :m_array{ 0, 1, 2 } {} // error C2536: 'A::A::m_array' : cannot specify explicit initializer for arrays
private:
    int m_array[3];
};

更多详情请见bug report

有哪些可能的解决方法?

【问题讨论】:

  • 在声明点初始化是否有效? int m_array[3]{1,2,3};?
  • std::array 有效吗? (除非编译器在 C++14 上抢先一步,否则您将需要额外的大括号)。
  • @juanchopanza:与 VC++ 2013 相同的错误。
  • 声明数组为std::array<int, 3> m_array;并初始化为A() :m_array ({ 0, 1, 2 }) {}。好不好用?
  • @galop1n OP 要求解决此问题。

标签: c++ visual-studio c++11


【解决方案1】:

作为 cmets,您可以尝试这种解决方法。

class A
{
    A() : m_array ({ 0, 1, 2 }) {}
private:
    std::array<int, 3> m_array;
};

似乎 VS2013 为 std::array 构造函数制作了初始化列表,您可以在构造函数的初始化程序中对其进行初始化。你写的代码是有效的,gcc 和 clang 都支持。 VS2013缺乏。

【讨论】:

  • 我必须在构造函数中使用一对额外的大括号才能在 VS2013 中编译。 A() : m_array ({ { 0, 1, 2 } })
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-09
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 2016-01-22
相关资源
最近更新 更多