如何在 C++ 初始化列表中初始化指针数组
How to Initialize array of pointers in a c++ Initializer List
我的 class 有一个指针数组(为说明点编辑的代码)
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) }
{
}
但是我收到警告 - 在初始化列表中获取临时地址。
这种在初始化列表中初始化数组的方式不正确吗?
注意 - 我不能动态分配内存。一切都必须静态分配。
您可以停止将其设为指针数组,而将其设为对象数组:
std::array<IMX6S::IMX6SAnalogSource, 2> _channels;
IMX6SAnalogIn::IMX6SAnalogIn() :
_channels{{0,0.0f},{1,0.0f}}
{
}
在不分配内存的情况下,无法使用指针数组执行此操作。那么,您可以使对象直接成为 class 的成员,并将指向它们的指针存储在一个数组中,该数组也是 class 的成员。但这在功能上与上面没有什么不同。
我的 class 有一个指针数组(为说明点编辑的代码)
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) }
{
}
但是我收到警告 - 在初始化列表中获取临时地址。
这种在初始化列表中初始化数组的方式不正确吗?
注意 - 我不能动态分配内存。一切都必须静态分配。
您可以停止将其设为指针数组,而将其设为对象数组:
std::array<IMX6S::IMX6SAnalogSource, 2> _channels;
IMX6SAnalogIn::IMX6SAnalogIn() :
_channels{{0,0.0f},{1,0.0f}}
{
}
在不分配内存的情况下,无法使用指针数组执行此操作。那么,您可以使对象直接成为 class 的成员,并将指向它们的指针存储在一个数组中,该数组也是 class 的成员。但这在功能上与上面没有什么不同。