我的班级有一系列指针( 代码编辑用于说明点 )
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) }
{
}
但是我收到了警告 - 在初始化列表中收到临时地址
这种在初始化列表中初始化数组的方式是不正确的?
注意 - 我无法动态分配内存。一切都必须静态分配。
答案 0 :(得分:2)
你可以停止使它成为一个指针数组并使它成为一个对象数组:
std::array<IMX6S::IMX6SAnalogSource, 2> _channels;
IMX6SAnalogIn::IMX6SAnalogIn() :
_channels{{0,0.0f},{1,0.0f}}
{
}
在没有分配内存的情况下,无法使用指针数组执行此操作。好吧,你可以使对象指向类的成员,并将指针存储在一个数组中,这些数组也是类的成员。但这在功能上与上述没有什么不同。