У меня есть этот класс:
class model
{
private:
link_list list;
float parameter_B1;
float parameter_B0;
public:
model();
float getparameter_B1() const;
float getparameter_B0() const;
float predict();
void info();
};
, в котором float parameter_B1
и float parameter_B0
являются постоянными, но чтобы их инициализировать, я должен ввести тело конструктора и прочитать файл и использовать этот файл данные, чтобы найти значение этих двух атрибутов, но как только я их установлю, они больше не изменятся (поэтому я предполагаю, что они считаются постоянными)
примерно так:
model::model()
{
char filename[300];
cout << "enter file name(path\\filname.txt):" << endl;
cin >> filename;
FILE* fp;
fp = fopen(filename, "r+");
float x, y;
if (fp == NULL)
{
cout << "Unable to open the file!" << endl;
exit(EXIT_FAILURE);
}
else
{
while (!feof(fp))
{
if (fscanf(fp, "%f\t%f", &x, &y) == 2)
{
Pair p(x, y);
list.insertNewNode(p);
}
}
}
Pair _average = list.average();
parameter_B1 = list.parameters1(_average);
parameter_B0 = list.parameters2(_average, parameter_B1);
}
но если я изменю свой класс на:
class model
{
private:
link_list list;
const float parameter_B1;
const float parameter_B0;
public:
model();
const float getparameter_B1() const;
const float getparameter_B0() const;
float predict();
void info();
};
, я получу эту ошибку "model :: model ()" не обеспечивает инициализацию для:
1. член const "модель :: параметр_B1"
2. член const "model :: parameter_B0"
, но, как вы видите, я не могу использовать список инициализаторов.
что мне делать? не является ли объявление постоянной переменной моим единственным решением?