Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику 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
- есть, а что внутри него или каков его размер - в этом объявлении неважно.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Нужно реализовать клиент-серверное приложение для обмена сообщениями между компьютерами (простой чат), используя при этом UDP пакеты и только...
У меня есть три окна: MainWindow, SelectPreset, PresetОкно SelectPreset вызывается из окна MainWindow
Дана квадратная матрицаЕсли в i-ой строке матрицы элемент принадлежащий главной диагонали отрицателен, то заменить этот элемент суммой элементов...
Я установил себе на компьютер boostПрошел все этапы установки по гайду из интернета,подключил скомпилированные библиотеки в cpp-properties