C/C++

Синтаксическая ошибка класса. C++

Написал вот такой код(ниже), а на 12 строке выдает ошибку "Ошибка C2061 синтаксическая ошибка: идентификатор "inv""
Own C:\Users\mars3\source\repos\Own\Own\Source.cpp 12

Обьясните пожалуйста что не так и как ее решить. Спасибо!
12 строка: void Buy(const own& product, inv &p)



 #include  
#include
using namespace std;


class own;

class me
{

public:
void Buy(const own& product, inv &p)
{

}

private:
string name = "Noname";
int money = 1000;

};


class inv
{
public:

void sorting()
{

}

private:
int pc = 0;

};


class own
{
public:

string GetName()
{
return name;
}

int GetPrice()
{
return price;
}

private:
string name = "Noname";
int price = 0;

};


int main()
{





return 0;
}
Когда допишешь код для использования этих функций в классах - получишь еще кучу ошибок ) Заодно узнаешь что иногда реализацию нужно выносить из класса а методы для получения чего-либо (геттеры) нужно делать с гарантией константности.
АК
Алекс Кузнецов
51 417
Лучший ответ
не люблю с++
где то скобки закрыты не правильно.
Николай Семьянов Если я убираю inv& p, то ошибка изчезает
Да и скобок везде хватает
На такое поменяй
class own;
class inv;

class me
Проблема заключается в том, что при объявлении функции `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".
Павел Ермаков
Павел Ермаков
14 368