работа класса с другим классом(С++, ООП) [закрыт]

177
22 апреля 2022, 01:30
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском.

Закрыт 1 год назад.

Улучшить вопрос

Почему когда класс Apple находиться выше класса Human, то показывает ошибку, а когда класс Human i класс Apple поменять местами, то всё работает? Подскажите, пожалуйста, знатоки ООП;)

#include <iostream>
#include <string>
using namespace std;
class Apple;
class Human;

class Apple
{
public:
  Apple(int weight, string color)
  {
    this->weight = weight;
    this->color = color;
  }
  friend void Human::EatHalfApple(Apple& apple);
private:
  int weight;
  string color;
};
class Human
{
public:
  void EatHalfApple(Apple& apple);
};
void Human::EatHalfApple(Apple& apple)
{
  apple.weight /= 2;
  cout << apple.weight << endl;
}
int main()
{
  Apple apple(145, "RED");
  Human John;
  John.EatHalfApple(apple);
  return 0;
}
Answer 1

Потому что в классе Apple есть

friend void Human::EatHalfApple(Apple& apple);

Но к этому моменту компилятор знает только о том. что есть такой класс - Human - это вы ему объяснили... но вот что внутри него есть, в частности, есть ли метод EatHalfApple - ему неизвестно, проверить он этого не в состоянии - вот и сообщает об ошибке.

Если же поменять их местами - то

void EatHalfApple(Apple& apple);

ошибки не вызывает, так как компилятору известно, что такой класс - Apple - есть, а что внутри него или каков его размер - в этом объявлении неважно.

READ ALSO
C++ Вопрос по реализации UDP чата

C++ Вопрос по реализации UDP чата

Нужно реализовать клиент-серверное приложение для обмена сообщениями между компьютерами (простой чат), используя при этом UDP пакеты и только...

198
Блокируются элементы дочернего окна в Qt C++

Блокируются элементы дочернего окна в Qt C++

У меня есть три окна: MainWindow, SelectPreset, PresetОкно SelectPreset вызывается из окна MainWindow

185
Пожалуйста найти ошибку. По возможности дорешать задачу

Пожалуйста найти ошибку. По возможности дорешать задачу

Дана квадратная матрицаЕсли в i-ой строке матрицы элемент принадлежащий главной диагонали отрицателен, то заменить этот элемент суммой элементов...

202
Подключение библиотек boost к visual studio code

Подключение библиотек boost к visual studio code

Я установил себе на компьютер boostПрошел все этапы установки по гайду из интернета,подключил скомпилированные библиотеки в cpp-properties

128