C/C++

Классы, функции, объекты

 //Почему я не могу num1.compare(num2, num3); так сделать?
#include

using namespace std;

class Integer
{
//friend int compare(const Integer& obj, const Integer& obj2);
public:
Integer(int number)
{
value = number;
}
int compare(const Integer& obj, const Integer& obj2){ return obj.value - obj2.value; };
void print() const
{
std::cout
 int compare(const Integer& obj, const Integer& obj2) const //тут конст
{ return obj.value - obj2.value; };
Ругается что над константым обьектом num1 может быть произведено несанкционированное изменение не-константым методом compare.
Для констаных версий обьекта следует добавлять константные версии методов.
ИЕ
Иван Ермоленко
51 417
Лучший ответ
 #include 

using namespace std;

struct Integer {
Integer() noexcept : value(0) {}
explicit Integer(const int value) noexcept : value(value) {}
operator int()const noexcept {
return value;
}
private:
int value;
friend istream& operator>>(istream& inp, Integer& i) {
return inp >> i.value;
}
friend ostream& operator
Nikita4 Степанов
Nikita4 Степанов
74 559
Вероятно, потому что у тебя value находится в private, и ты не можешь просто так обратиться к ней через точку в строке:
  return obj.value - obj2.value 
С ошибками компилятора было бы попроще разобраться
Гуванчмурад ... Вовсе дело не в этом
не успел про const написать, опередили. А тебя не смущает, что для того, чтобы сравнить num 2 и num3 тебе приходится num1 использовать?
Гуванчмурад ... У меня другой принцип выполнения, просто смутила ошибка при исправлении
Судя по всему, ты хочешь сравнить два числа.
В таком случае один аргумент в методе лишний. Помимо того, что требуется const. Ну и в целом, код конечно так себе, на мой непрофессиональный взгляд

 #include    

using namespace std;

class Integer
{
//friend int compare(const Integer& obj, const Integer& obj2);
public:
Integer(int number)
{
value = number;
}
int compare(const Integer& obj) const { return this->value - obj.value; };
void print() const
{
std::cout