【发布时间】:2015-01-26 09:44:29
【问题描述】:
我试图通过调用数组中每个对象的构造函数来硬编码对象数组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)'
进一步research我试过了:
// 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>')
我第一次尝试时最困惑,为什么它错了?这似乎是有道理的,但我得到了一个错误......我什至正确地包含了头文件。
【问题讨论】:
标签: c++ arrays object struct constructor