Тема: Немає класу збереження.

Добрий день, друзі! У мене є питання щодо помили Е0077.
ОПИС ПРОБЛЕМИ:
У мене є два дружні класи Human та Apple.
Для збереження інкапсуляції я хочу прирівняти змінні  weight1 = weight та weight2 = weight, але нічого не виходить.
Підкажіть, що робити, будь ласка.

#include<iostream>
#include<string>
using namespace std;
class Human;
class Apple;
class Human {
public:
    void TakeApple(Apple& apple);
};
class Apple {
    friend Human;
private:
    int weight;
    string color;
public:
    int weight2;
    string color2;
    weight2 = weight;
    color2 = color;
    Apple(int weight1, string color1) {
        weight2 = weight1;
        color2 = color1;
    }
};
void Human::TakeApple(Apple& apple) {
    cout << apple.weight2 << apple.color2 << endl;
}
int main(){
    Apple apple(200, "green");
    Human John;
    John.TakeApple(apple);
    return 0;
}

2

Re: Немає класу збереження.

weight2= weight та color2=color пробачте за неточнсті

3 Востаннє редагувалося koala (20.05.2020 14:46:41)

Re: Немає класу збереження.

Не можна виконувати жодних дій (добре, крім ініціалізації) за межами функцій. Лише проголошувати щось.

//тут можна лише проголошувати глобальні змінні, функції, класи
class SomeClass
{
  //тут можна лише проголошувати змінні і методи класу 
  void somefunc()
  {
      //а тут можна щось чомусь присвоювати, порівнювати і т.д.
  }
}

А взагалі тримати дві однакові змінні "заради інкапсуляції" - не найкраща ідея. Заради інкапсуляції треба не надавати доступ до змінних, окрім як через функції.

Подякували: SideShowBoBGOT1

4

Re: Немає класу збереження.

SideShowBoBGOT написав:

У мене є питання щодо помили Е0077.

Думаєте ми знаємо, що це за помилка?
Чому б замість її "ідентифікатора" не скопіювати одразу текст самої помилки?

SideShowBoBGOT написав:

Для збереження інкапсуляції я хочу прирівняти змінні  weight1 = weight та weight2 = weight, але нічого не виходить.

Нічого не зрозумів.
operator= - це оператор "присвоєння", який (якби це дивно не звучало) присвоює значення правого операнда лівому, грубо кажучи.
А от вже operator== - це оператор рівності, який власне порівнює щось.
То ви порівнюєте чи присвоюєте?

Подякували: SideShowBoBGOT, koala, leofun013