需求

今天编译是报错: warning: list-initializer for non-class type must not be parenthesized, 报错的地方是对类中包含的成员变量是一个数组,然后使用了列表初始化。

解决

其实这个报错提示已经说的很清楚了,对非类使用了列表初始化并且加了括号。所以解决的方法也很简单,这种数组成员变量初始化使用列表初始化时,不要加括号就 ok 了。

class Sn74cbtlv3253 {
      //using FuncVoidVoid = void (*)(void);
      using FuncVoidBool = void (*)(bool);

public:
      enum Index {
	      kIndex1 = 0, kIndex2, kIndex3, kIndex4,
      };

public:
      Sn74cbtlv3253(FuncVoidBool s0, FuncVoidBool s1, FuncVoidBool oe) :
	      s0_(s0), s1_(s1), oe_(oe) {};

      void Switch(Index index);

      void Disconnect();

private:
      FuncVoidBool s0_;
      FuncVoidBool s1_;
      FuncVoidBool oe_;
};

class Channel {
public:
      enum ChannelIndex {
	      kChannel1 = 0, kChannel2, kChannel3, kChannel4, kChannel5, kChannel6,
	      kChannel7, kChannel8, kChannel9, kChannel10, kChannel11, kChannel12,
      };
public:
      Channel();
      void Switch(ChannelIndex index);
      void Disconnect();

private:
      Sn74cbtlv3253 sn74cbtlv3253_[6][2];
};

Channel::Channel() : sn74cbtlv3253_{
      {{Chip1S0PinControl, Chip1S1PinControl, Chip1En1PinControl}, {Chip1S0PinControl, Chip1S1PinControl, Chip1En2PinControl}},
      {{Chip2S0PinControl, Chip2S1PinControl, Chip2En1PinControl}, {Chip2S0PinControl, Chip2S1PinControl, Chip2En2PinControl}},
      {{Chip3S0PinControl, Chip3S1PinControl, Chip3En1PinControl}, {Chip3S0PinControl, Chip3S1PinControl, Chip3En2PinControl}},
      {{Chip4S0PinControl, Chip4S1PinControl, Chip4En1PinControl}, {Chip4S0PinControl, Chip4S1PinControl, Chip4En2PinControl}},
      {{Chip5S0PinControl, Chip5S1PinControl, Chip5En1PinControl}, {Chip5S0PinControl, Chip5S1PinControl, Chip5En2PinControl}},
      {{Chip6S0PinControl, Chip6S1PinControl, Chip6En1PinControl}, {Chip6S0PinControl, Chip6S1PinControl, Chip6En2PinControl}},
}
{
      Disconnect();
}

参考

list initializer for non class type must not be parenthesized werror

C++之列表初始化详解

c++11初始化列表(initializer_list)