I am trying to hardcode a bunch of values in an array of objects, FloatParameterFields by calling the constructor of each object in the array. I am calling these constructors in another constructor, ParametersServerABS().
The array of objects FloatParameterFields is a private member of the ParametersServerABS class:
private:
FloatParameterFields _floatParameters[FloatParameter::NUM_FLOAT_PARAMS];
bool _safeMode;
In another file, I defined the enum and struct:
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;
};
In my first attempt I did:
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);
}
This gave the error:
no match for call to 'FloatParameterFields) (double, double, double, FloatParameter, AccessModes)'
Upon further research I tried:
// 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)}
And got the error:
no match for 'operator=' (operand types are 'FloatParameterFields' and '<brace-enclosed initializer list>')
I am most confused by my first attempt, why is it wrong? It seems to make sense yet I get an error... I even properly included the header files.