为另一个构造函数中的对象数组调用构造函数
Calling constructor for an array of objects in another constructor
我正在尝试对对象数组中的一堆值进行硬编码,FloatParameterFields
通过调用数组中每个对象的构造函数。我在另一个构造函数中调用这些构造函数,ParametersServerABS()
.
对象数组FloatParameterFields
是 ParametersServerABS
类的私有成员:
private:
FloatParameterFields _floatParameters[FloatParameter::NUM_FLOAT_PARAMS];
bool _safeMode;
在另一个文件中,我定义了枚举和结构:
enum FloatParameter {
CHIP_CLOCK_RATE_0 = 0,
CHIP_CLOCK_RATE_1,
CHIP_CLOCK_RATE_2,
CHIP_CLOCK_RATE_3,
CHIP_CLOCK_RATE_4,
NUM_FLOAT_PARAMS
};
enum AccessModes {
READ_ONLY = 0,
SAFE_WRITE,
WRITE,
NUM_ACCESS_MODES
};
struct FloatParameterFields {
public:
FloatParameterFields() :
upperBound(0),
lowerBound(0),
value(0),
id(NUM_FLOAT_PARAMS),
mode(NUM_ACCESS_MODES) {
}
FloatParameterFields(float upperBound, float lowerBound, float value, FloatParameter id,
AccessModes mode) :
upperBound(upperBound),
lowerBound(lowerBound),
value(value),
id(id),
mode(mode) {
}
float upperBound;
float lowerBound;
float value;
FloatParameter id;
AccessModes mode;
};
在我的第一次尝试中,我做到了:
ParametersServerABS::ParametersServerABS() :
_safeMode(true) {
// Hardcoding the values to the struct
_floatParameters[FloatParameter::CHIP_CLOCK_RATE_0](2.0, 2.0, 1.0,
FloatParameter::CHIP_CLOCK_RATE_0, AccessModes::WRITE);
_floatParameters[FloatParameter::CHIP_CLOCK_RATE_1](2.0, 2.0, 1.0,
FloatParameter::CHIP_CLOCK_RATE_1, AccessModes::SAFE_WRITE);
_floatParameters[FloatParameter::CHIP_CLOCK_RATE_2](2.0, 2.0, 1.0,
FloatParameter::CHIP_CLOCK_RATE_2, AccessModes::WRITE);
_floatParameters[FloatParameter::CHIP_CLOCK_RATE_3](2.0, 2.0, 1.0,
FloatParameter::CHIP_CLOCK_RATE_3, AccessModes::WRITE);
_floatParameters[FloatParameter::CHIP_CLOCK_RATE_4](2.0, 2.0, 1.0,
FloatParameter::CHIP_CLOCK_RATE_4, AccessModes::READ_ONLY);
}
这给出了错误:
no match for call to 'FloatParameterFields) (double, double, double, FloatParameter, AccessModes)'
经过进一步的研究,我尝试了:
// Hardcoding the values to the struct
_floatParameters[FloatParameter::NUM_FLOAT_PARAMS]= {FloatParameterFields(2.0, 2.0, 1.0,
FloatParameter::CHIP_CLOCK_RATE_0, AccessModes::WRITE),
FloatParameterFields(2.0, 2.0, 1.0,
FloatParameter::CHIP_CLOCK_RATE_1, AccessModes::SAFE_WRITE),
FloatParameterFields(2.0, 2.0, 1.0,
FloatParameter::CHIP_CLOCK_RATE_2, AccessModes::WRITE),
FloatParameterFields(2.0, 2.0, 1.0,
FloatParameter::CHIP_CLOCK_RATE_3, AccessModes::WRITE),
FloatParameterFields(2.0, 2.0, 1.0,
FloatParameter::CHIP_CLOCK_RATE_4, AccessModes::READ_ONLY)}
并得到错误:
no match for 'operator=' (operand types are 'FloatParameterFields' and '<brace-enclosed initializer list>')
我最困惑的是我的第一次尝试,为什么是错误的?这似乎是有道理的,但我得到了一个错误...我什至正确地包含了头文件。
在输入构造函数的开头{
之前,所有成员都已初始化。这包括_floatParameters
数组及其所有元素。当你做...
_floatParameters[FloatParameter::CHIP_CLOCK_RATE_0](2.0, 2.0, 1.0,
FloatParameter::CHIP_CLOCK_RATE_0, AccessModes::WRITE);
。这被视为试图调用_floatParameters[FloatParameter::CHIP_CLOCK_RATE_0]
,就好像它是一个类似函数的对象一样。它不被视为初始化器,因为对象已经初始化。
同样,您稍后会执行以下操作:
_floatParameters[FloatParameter::NUM_FLOAT_PARAMS]= { ... };
它尝试在数组初始化后对数组使用初始化语法。
相反,您可以使用构造函数的成员初始化列表:
ParametersServerABS::ParametersServerABS()
: _safeMode(true),
_floatParameters{
{2.0, 2.0, 1.0, FloatParameter::CHIP_CLOCK_RATE_0, AccessModes::WRITE},
// and so on...
}
{
}
你调用_floatParameters[FloatParameter::CHIP_CLOCK_RATE_0](...)
就好像你有一个函数数组一样,你正在调用它的一个项目。尽管C++中确实存在函数数组,但它似乎不是您尝试实现的目标。
简单地说,你不能像这样调用构造函数。下面是一个正确的示例:
_floatParameters[FloatParameter::CHIP_CLOCK_RATE_0] = FloatParameterFields(2.0, 2.0, 1.0, FloatParameter::CHIP_CLOCK_RATE_0, AccessModes::WRITE);
您的另一种方法本可以奏效,但存在一个错误。
_floatParameters[FloatParameter::NUM_FLOAT_PARAMS]= { ... }
您正在将初始值设定项列表(即值列表)分配给_floatParameters
的第FloatParameter::NUM_FLOAT_PARAMS
项。设置直接分配给_floatParameters
的阵列。这将适用于矢量,但不适用于普通的旧数组。
_floatParameters = { ... }
- 在字符数组维度分析中构造字符数组
- 第 i 个元素返回 i 的函数数组
- 使用嵌套函数数组是个好主意吗?
- 正确实现类函数数组
- 试图引用已删除函数数组的相等运算符
- 如何在静态函数中使用成员函数数组
- 尝试使用 Array 类的模板构造整数数组时,错误:为什么数组类型"int [5]"不可分配,
- 无法创建函数数组
- 构造函数数组
- 使用开关或定义函数数组 - 更快
- 如何使用构造函数的参数构造成员数组的每个元素
- 编写一个函数,该函数将覆盖主函数数组中的值
- 函数,该函数动态构造字节数组并返回长度
- 可以像'funs[1]();'一样调用的函数数组
- std::AVX内部函数数组
- 如果数组大小未知,如何将函数数组作为参数传递
- 从函数数组中获取值
- 使用元编程在编译时初始化函数数组
- 复制构造函数 [数组] C++
- 深层复制构造函数数组类