Когда допишешь код для использования этих функций в классах - получишь еще кучу ошибок ) Заодно узнаешь что иногда реализацию нужно выносить из класса а методы для получения чего-либо (геттеры) нужно делать с гарантией константности.
Проблема заключается в том, что при объявлении функции `Buy` в классе `me`, компилятор еще не знает о существовании класса `inv`, потому что его объявление идет позже. Когда компилятор просматривает код сверху вниз, он не может распознать `inv` как тип данных, поскольку `inv` еще не было объявлено на момент, когда встречается в `Buy`.
Решение этой проблемы включает перемещение объявления класса `inv` до объявления класса `me`.
Ваш код будет выглядеть так:
```cpp
#include <iostream>
#include <string>
using namespace std;
class own;
class inv; // forward declaration
class inv
{
public:
void sorting()
{
}
private:
int pc = 0;
};
class me
{
public:
void Buy(const own& product, inv &p)
{
}
private:
string name = "Noname";
int money = 1000;
};
class own
{
public:
string GetName()
{
return name;
}
int GetPrice()
{
return price;
}
private:
string name = "Noname";
int price = 0;
};
int main()
{
return 0;
}
```
Таким образом, когда компилятор встречает функцию `Buy`, он уже знает о существовании класса `inv` и может распознать его как тип данных. Это называется "предварительное объявление" или "forward declaration".