Problem z funkcją i klasą

0

Witam postanowiłem zrobić aplikacje w której możesz dowiedzieć się o danej grze podstawowych informacji typu cena, platforma, itd.
Tak wygląda moja klasa:

class Gry
{
public:
    string nazwa;
    double cena;
    string gatunek;
    string ocena;
    string platforma;
};

Tutaj umiescilem informacje o jednej z gier:

int main()
{


    wybor_gry();
    Gry Mc;
    Mc.nazwa="Minecraft";
    Mc.cena=89.99;
    Mc.gatunek="Sandbox";
    Mc.ocena="8.5/10";
    Mc.platforma="PC/XBOX360/XBOX ONE/PS3/PS4";
    return 0;
}

A blad wyskakuje w funkcji void , ponieważ Mc nie jest zdeklarowane:

void wybor_opcji()
{
    int wybor=0;
    system("cls");
    cout<<"Wybierz ktora opcja cie interesuje: "<<endl;
    cout<<"------------------------------------"<<endl;
    cout<<"1.Cena "<<endl;
    cout<<"2.Gatunek "<<endl;
    cout<<"3.Platforma "<<endl;
    cout<<"4.Ocena "<<endl;
    cin>>wybor;
    switch(wybor)
    {
        case 1:
            {
                system("cls");
                cout<<"Ta gra kosztuje: "<<Mc.cena<<endl;
            }
1

Temat bardziej do newbie.
W każdym razie - odwołujesz się do zmiennej Mc, której nigdzie nie utworzyłeś. To że ta zmienna jest w main, nie znaczy z automatu, że funkcja wywoływana w main będzie ją widzieć.

void wybor_opcji(const Gry& Mc)
{
    int wybor=0;
    system("cls");
    cout<<"Wybierz ktora opcja cie interesuje: "<<endl;
    cout<<"------------------------------------"<<endl;
    cout<<"1.Cena "<<endl;
    cout<<"2.Gatunek "<<endl;
    cout<<"3.Platforma "<<endl;
    cout<<"4.Ocena "<<endl;
    cin>>wybor;
    switch(wybor)
    {
        case 1:
            {
                system("cls");
                cout<<"Ta gra kosztuje: "<<Mc.cena<<endl;
            }

Jak mniemam, używasz tej funkcji w wybor_gry(); więc ta funkcja, również będzie potrzebować tego argumentu.

Potem w main robisz tak:

int main()
{
 
    Gry Mc;
    wybor_gry(Mc);
    
    Mc.nazwa="Minecraft";
    Mc.cena=89.99;
    Mc.gatunek="Sandbox";
    Mc.ocena="8.5/10";
    Mc.platforma="PC/XBOX360/XBOX ONE/PS3/PS4";
    return 0;
}

i będzie działać. ;)

0

Teraz to ja sam już nie wiem o co chodzi. Wkleje caly kod z góry dziekuje:
Wyskakujace bledy: screenshot-20180807001710.png

class Gry
{
    public:
    string nazwa;
    double cena;
    string gatunek;
    string ocena;
    string platforma;
};

wybor_opcji(const Gry&Mc);

void wstecz()
{
    int wybor=0;
    cout<<"---------"<<endl;
    cout<<"1.Wstecz"<<endl;
    cout<<"2.Wyjdz"<<endl;
    cout<<"---------";
    switch(wybor)
    {
        case 1:wybor_opcji();
        break;
        case 2:system("exit");
        break;
        default:cout<<"Nie ma takiego numerku!"<<endl;
        break;
    }
}

void wybor_gry()
{
    int wybor=0;
    system("cls");
    cout<<"Wybierz dowolna gre: "<<endl;
    cout<<"1. Minecraft"<<endl;
    cin>>wybor;
    switch(wybor)
    {
        default:wybor_opcji();
        break;
    }
}

void wybor_opcji(const Gry&Mc)
{
    int wybor=0;
    system("cls");
    cout<<"Wybierz ktora opcja cie interesuje: "<<endl;
    cout<<"------------------------------------"<<endl;
    cout<<"1.Cena "<<endl;
    cout<<"2.Gatunek "<<endl;
    cout<<"3.Platforma "<<endl;
    cout<<"4.Ocena "<<endl;
    cin>>wybor;
    switch(wybor)
    {
        case 1: cout<<"Ta gra kosztuje: "<<Mc.nazwa<<endl;
            break;
        case 2: cout<<" Gatunek tej gry to: "<<Mc.gatunek<<endl;
            break;
        case 3: cout<<"Platformy obslugujace ta gre: "<<Mc.platforma<<endl;
            break;
        case 4: cout<<"Ocena: "<<Mc.ocena<<endl;
            break;
        default: cout<<"Nie ma takiego numerku!"<<endl;
            break;
    }
}

int main()
{
    Gry Mc;
    wybor_gry(Mc);
    Mc.nazwa="Minecraft";
    Mc.cena=89.99;
    Mc.gatunek="Sandbox";
    Mc.ocena="8.5/10";
    Mc.platforma="PC/XBOX360/XBOX ONE/PS3/PS4";
    return 0;
}
0
void wybor_gry()
{
    int wybor=0;
    system("cls");
    cout<<"Wybierz dowolna gre: "<<endl;
    cout<<"1. Minecraft"<<endl;
    cin>>wybor;
    switch(wybor)
    {
        default:wybor_opcji();
        break;
    }
}

odwołujesz się do wybor_opcji(), która nie istnieje. Jest wybor_opcji(const Gry& Mc).
wybor_opcji(const Gry&Mc); - poczytaj o deklaracji/definicji funkcji.

Tutaj naprawdę kolego wziąłbym jakiegoś Pratę/Stroustrupa do ręki i zaczął od totalnych podstaw, bo nic Ci nie da takie klepanie, nie mając żadnych podstaw.

Poprawiłem, żeby Ci się to skompilowało, kod dalej wygląda źle, ale może wyciągniesz wnioski i zobaczysz gdzie popełniałeś błędy:

#include <iostream>

using namespace std;

class Gry
{
    public:
    string nazwa;
    double cena;
    string gatunek;
    string ocena;
    string platforma;
};
void wybor_opcji(const Gry& Mc);
 
void wstecz(const Gry& Mc)
{
    int wybor=0;
    cout<<"---------"<<endl;
    cout<<"1.Wstecz"<<endl;
    cout<<"2.Wyjdz"<<endl;
    cout<<"---------";
    switch(wybor)
    {
        case 1:wybor_opcji(Mc);
        break;
        case 2:system("exit");
        break;
        default:cout<<"Nie ma takiego numerku!"<<endl;
        break;
    }
}
 
void wybor_gry(const Gry&Mc)
{
    int wybor=0;
    system("cls");
    cout<<"Wybierz dowolna gre: "<<endl;
    cout<<"1. Minecraft"<<endl;
    cin>>wybor;
    switch(wybor)
    {
        default:wybor_opcji(Mc);
        break;
    }
}
 
void wybor_opcji(const Gry&Mc)
{
    int wybor=0;
    system("cls");
    cout<<"Wybierz ktora opcja cie interesuje: "<<endl;
    cout<<"------------------------------------"<<endl;
    cout<<"1.Cena "<<endl;
    cout<<"2.Gatunek "<<endl;
    cout<<"3.Platforma "<<endl;
    cout<<"4.Ocena "<<endl;
    cin>>wybor;
    switch(wybor)
    {
        case 1: cout<<"Ta gra kosztuje: "<<Mc.nazwa<<endl;
            break;
        case 2: cout<<" Gatunek tej gry to: "<<Mc.gatunek<<endl;
            break;
        case 3: cout<<"Platformy obslugujace ta gre: "<<Mc.platforma<<endl;
            break;
        case 4: cout<<"Ocena: "<<Mc.ocena<<endl;
            break;
        default: cout<<"Nie ma takiego numerku!"<<endl;
            break;
    }
}
 
int main()
{
    Gry Mc;
    wybor_gry(Mc);
    Mc.nazwa="Minecraft";
    Mc.cena=89.99;
    Mc.gatunek="Sandbox";
    Mc.ocena="8.5/10";
    Mc.platforma="PC/XBOX360/XBOX ONE/PS3/PS4";
    return 0;
}
0

Dziekuje bardzo za pomoc juz działa tylko chciałbym się spytac w jakims sensie kod wygląda zle,. Kurs już mam tutaj link: https://strefakursow.pl/kursy/programowanie/kurs_c_od_zera_do_bohatera.html Nie znam jeszcze tych bardziej zawaansowanych zagadnień i dlatego musze korzystać z tych które umiem :)

0

Tak na szybko.

  1. Klasa, która ma tylko publiczne dane składowe i nic poza tym jest zbędna - struktura by wystarczyła.
switch(wybor)
    {
        default:wybor_opcji(Mc);
        break;
    }

to jest totalnie bez sensu, po co tu switch?

  1. Funkcja void wstecz() jest bez sensu, to samo można by było uzyskać przy dodatkowej opcji w switch-case.
    Mc.nazwa="Minecraft";
    Mc.cena=89.99;
    Mc.gatunek="Sandbox";
    Mc.ocena="8.5/10";
    Mc.platforma="PC/XBOX360/XBOX ONE/PS3/PS4";

od tego jest konstruktor, żeby nie ustawiać wartości zmiennych pojedynczo. Zresztą, co dają te dane, skoro potem nic z nimi nie robisz?
5. W main do funkcji wybor_gry przekazujesz klasę bez żadnych konkretnych wartości, bo patrz punkt 4.

1 użytkowników online, w tym zalogowanych: 0, gości: 1