Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику 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;
}
Потому что в классе Apple есть
friend void Human::EatHalfApple(Apple& apple);
Но к этому моменту компилятор знает только о том. что есть такой класс - Human - это вы ему объяснили... но вот что внутри него есть, в частности, есть ли метод EatHalfApple - ему неизвестно, проверить он этого не в состоянии - вот и сообщает об ошибке.
Если же поменять их местами - то
void EatHalfApple(Apple& apple);
ошибки не вызывает, так как компилятору известно, что такой класс - Apple - есть, а что внутри него или каков его размер - в этом объявлении неважно.
Продвижение своими сайтами как стратегия роста и независимости