Я пишу компьютерную программу для своего компьютерного программного класса, но по какой-то причине я не могу запустить свою программу из-за ошибки, связанной с моими функциями-членами. Я получаю сообщение об ошибкеПочему моя функция-член не работает?
«Ошибка Ошибка C3490:„логово“не может быть изменен, поскольку доступ к нему осуществляется через константный объект»
Что я сделал не так, чтобы получить это сообщение и как я могу это исправить ?
Это мой код:
// implement all class member functions here, gcd function is given
int Fraction::gcd()
{
if(num == 0) return 1;
int a = max(abs(num), abs(den));
int b = min(abs(num), abs(den));
while(b != 0)
{
int result = a%b;
a = b;
b = result;
}
return a;
}
void Fraction::input(istream& in)
{
char op;
in >> num;
in >> op;
in >> den;
if(den == 0)
{
cout << "Wrong input. Exit the program" << endl;
exit(1);
}
if(den < 0)
{
num *= -1;
den *= -1;}
}
void Fraction::output(ostream& out)
{
if(den == 0)
out << "0";
else
out << num << "/" << den;
}
Fraction::Fraction(int numerator, int denominator)
{
assert(denominator !=0);
num = numerator;
den = denominator;
if(den < 0)
{
num *=-1;
den *= -1;
}
}
bool Fraction::less(const Fraction& other) const
{
Fraction temp(other.num , other.den);
int num_1(num);
if(den != temp.den)
{
num_1 *= temp.den;
temp.num *= num;
}
if(num_1 < temp.num)
{return true;}
else
{return false;}
}
Fraction Fraction::reciprocal() const
{
Fraction tempa(num, den);
int temp(tempa.num);
tempa.num = tempa.den;
tempa.den = temp;
num = den;
if(den < 0)
{
num *= -1;
den *= -1;
}
return tempa;
}
Fraction Fraction::neg() const
{
num*=-1;
return;
}
Fraction::Fraction(int numerator)
{
num = numerator;
den = 1;
}
Fraction::Fraction()
{
num = 0;
den = 1;
}
Fraction Fraction::add(const Fraction& other) const
{
int num_1 = num *other.den;
int num_2 = den*other.den;
int denom = den*other.den;
Fraction result((num_1+num_2), denom);
result.reduce();
return result;
}
Fraction Fraction::div(const Fraction& other) const
{
Fraction temp(num, den);
other = other.reciprocal();
Fraction result(temp.mul(other));
return result;
}
Fraction Fraction::sub(const Fraction& other) const
{
int num_1 = num *other.den;
int num_2 = den*other.den;
int denom = den*other.den;
Fraction result((num_1-num_2), denom);
result.reduce();
return result;
}
Fraction Fraction::mul(const Fraction& other) const
{
int num_0 = num*other.num;
int denom = den*other.den;
Fraction result(num_0, denom);
result.reduce();
return result;
}
void Fraction::reduce()
{
int r = gcd();
num /= r;
den /= r;
if(num == 0)
den = 1;
}
bool Fraction::less_or_equal(const Fraction& other) const
{
}
bool Fraction::greater_or_equal(const Fraction& other) const
{
}
bool Fraction::equal(const Fraction& other) const
{
}
bool Fraction::not_equal(const Fraction& other) const
{
}
bool Fraction::greater(const Fraction& other)
Пожалуйста, удалите любой ненужный код и соответствующим образом отформатируйте его. – olevegard
Как говорится в сообщении, вы пытались изменить 'den' через объект' const'. Это именно то, что вы сделали неправильно. Есть ли что-то непонятное в отношении вышеизложенного? (Примеры ответов: Я не знаю, что такое «изменить», я не знаю, что такое «const», я не знаю, какой объект const, я не знаю, почему это неправильно). –