Синтаксическая ошибка класса. c++ - Вопросы по С+

Вопрос Синтаксическая ошибка класса. c++

Регистрация
1 Июн 2013
Сообщения
97
Репутация
0
Спасибо
0
Монет
0
Написал вот такой код(ниже), а на 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;

}
 
Регистрация
5 Авг 2013
Сообщения
93
Репутация
0
Спасибо
0
Монет
0
Когда допишешь код для использования этих функций в классах - получишь еще кучу ошибок ) Заодно узнаешь что иногда реализацию нужно выносить из класса а методы для получения чего-либо (геттеры) нужно делать с гарантией константности.
 
Регистрация
10 Июн 2013
Сообщения
74
Репутация
0
Спасибо
0
Монет
0
Проблема заключается в том, что при объявлении функции `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".
 
Регистрация
23 Дек 2013
Сообщения
75
Репутация
0
Спасибо
0
Монет
0
На такое поменяй
class own;
class inv;

class me
 
Сверху Снизу