如何初始化c ++初始化列表中的指针数组

时间:2015-12-01 20:46:25

标签: c++ initializer-list

我的班级有一系列指针( 代码编辑用于说明点

class IMX6S::IMX6SAnalogIn : public AP_HAL::AnalogIn {
public:
    IMX6SAnalogIn();

private:
    IMX6S::IMX6SAnalogSource* _channels[2];
};

class IMX6S::IMX6SAnalogSource : public AP_HAL::AnalogSource {
public:
    friend class IMX6S::IMX6SAnalogIn;
    IMX6SAnalogSource(int16_t pin, float initial_value);


};

我想在构造函数的初始化列表中初始化_channels数组,所以我尝试以下

IMX6SAnalogIn::IMX6SAnalogIn() :
     _channels{&IMX6SAnalogSource(0,0.0f),&IMX6SAnalogSource(1,0.0f) }
{
}

但是我收到了警告 - 在初始化列表中收到临时地址

这种在初始化列表中初始化数组的方式是不正确的?

注意 - 我无法动态分配内存。一切都必须静态分配。

1 个答案:

答案 0 :(得分:2)

你可以停止使它成为一个指针数组并使它成为一个对象数组:

std::array<IMX6S::IMX6SAnalogSource, 2> _channels;

IMX6SAnalogIn::IMX6SAnalogIn() :
     _channels{{0,0.0f},{1,0.0f}}
{
}

在没有分配内存的情况下,无法使用指针数组执行此操作。好吧,你可以使对象指向类的成员,并将指针存储在一个数组中,这些数组也是类的成员。但这在功能上与上述没有什么不同。