x-kom hosting

[C++] Problem z funkcją

fafa16
utworzono
utworzono

Witam, piszę program do obsługi pubu (stoły, klienci, produkty itp...) . 
Oto menu główne: 

 

    void menu(string nick)
    {
    char scegli;
    cout << "Benvenuta " << nick << endl;
    cout << "1. Apri conto" << endl;
    cout << "2. Attuali" << endl;
    cout << "3. Chiusura fiscale" << endl;
    cout << "Scegli:";
    cin >> scegli;

    switch (scegli)
    {
        case '1':
        apriConto();

        case '2':
        attuali();
    }

    }

 

no i mam następnie dwie funkcje. 
jedną otwieramy nowy rachunek a drugą sprawdzamy aktualne ale pojawia sie problem przy przejściu z "nowego rachunku" z powrotem do głównego menu. 

 

void apriConto()
    {
        int nrTavolo, nrPersone;
        char Back;
        cout << " Nr Tavolo: ";
        cin >> nrTavolo;
        system("CLS");

        cout << "Tavolo nr:" << nrTavolo << endl;
        cout << "Nr Persone: ";
        cin >> nrPersone;

        fstream plik;
        plik.open("Tavolo.txt", ios::out | ios::app);
        plik << "Tavolo nr:" << nrTavolo << endl;
        plik << "Nr Persone: " << nrPersone << endl;
        plik << "----CONTO----";
        plik.close();
        cout << "OK \n" << "Premi 9 per tornare";
        cin >> Back;
        if (Back==9)
        {
        menu();
        }
    }

A mianowicie: 

C:\Users\Fafa\Desktop\CPP\simplesystem\main.cpp|34|error: 'menu' was not declared in this scope|

pestka12
komentarz
komentarz

Witam.

 

Czy można zobaczyć cały program bo wtedy go przeanalizuje ? i mam pytanie to są funkcje lokalne czy globalne ? oraz zauważ że argumentem funkcji jest string a ty wywołujesz funkcje bez argumentu string jak coś spróbuj z argumentem domniemany czyli np string nick="klient" i powinno działać jak coś to proszę o odpisanie.  

fafa16
komentarz
komentarz
#include <iostream>
#include <fstream>
#include <windows.h>
#include <cstdlib>

using namespace std;

    void attuali()
    {
        int nrTavolo, nrPersone;
        fstream plik;
        plik.open("Tavolo.txt", ios::in);
        if (plik.good()==false)
        {
            cout << "Niente da visualizzare";
            exit(0);
        }
        int linia;
        plik.close();
        cout << "Tavolo nr:" << nrTavolo << endl;
        cout << "Nr Persone: " << nrPersone << endl;
        cout << "----CONTO----";

    }
    void apriConto()
    {
        int nrTavolo, nrPersone;
        char Back;
        cout << " Nr Tavolo: ";
        cin >> nrTavolo;
        system("CLS");
        cout << "Tavolo nr:" << nrTavolo << endl;
        cout << "Nr Persone: ";
        cin >> nrPersone;
        fstream plik;
        plik.open("Tavolo.txt", ios::out | ios::app);
        plik << "Tavolo nr:" << nrTavolo << endl;
        plik << "Nr Persone: " << nrPersone << endl;
        plik << "----CONTO----";
        plik.close();

        cout << "OK \n" << "Premi 9 per tornare";
        cin >> Back;
        if (Back==9)
        {
            menu(string nick)
        }
    }

    void menu(string nick)
    {
    char scegli;
    cout << "Benvenuta " << nick << endl;
    cout << "1. Apri conto" << endl;
    cout << "2. Attuali" << endl;
    cout << "3. Chiusura fiscale" << endl;
    cout << "Scegli:";
    cin >> scegli;

    switch (scegli)
    {
        case '1':
        apriConto();

        case '2':
        attuali();
    }

    }

    void login()
    {
        string nick, pass;
        cout << "Nickname: ";
        cin >> nick;
        cout << "Password: ";
        cin >> pass;

        if (nick == "irena" && pass == "irenafafaz")
        {
            system("CLS");
            menu(nick);
        }

        else
        {
             cout << "Nick o password sbagliata" << endl;
             login();
        }
    }

int main()
{
   login();
    return 0;
}

próbowałem dodać argumenty i to daje inny błąd. 

C:\Users\Fafa\Desktop\CPP\simplesystem\main.cpp|46|error: expected primary-expression before 'nick'|

pestka12
komentarz
komentarz (edytowane)
 void apriConto()
    {
        int nrTavolo, nrPersone;
        char Back;
        cout << " Nr Tavolo: ";
        cin >> nrTavolo;
        system("CLS");
        cout << "Tavolo nr:" << nrTavolo << endl;
        cout << "Nr Persone: ";
        cin >> nrPersone;
        fstream plik;
        plik.open("Tavolo.txt", ios::out | ios::app);
        plik << "Tavolo nr:" << nrTavolo << endl;
        plik << "Nr Persone: " << nrPersone << endl;
        plik << "----CONTO----";
        plik.close();

        cout << "OK \n" << "Premi 9 per tornare";
        cin >> Back;
        if (Back==9)
        {
            menu()
        }
    }

    void menu(string nick="np: gość")
    {
    char scegli;
    cout << "Benvenuta " << nick << endl;
    cout << "1. Apri conto" << endl;
    cout << "2. Attuali" << endl;
    cout << "3. Chiusura fiscale" << endl;
    cout << "Scegli:";
    cin >> scegli;

    switch (scegli)
    {
        case '1':
        apriConto();

        case '2':
        attuali();
    }

    }

Jak coś oto mi chodziło i powinno działać teraz jak coś to napisz jeżeli nie pomogło to będziemy radzić dalej :D 

PS: Jest jeszcze jeden sposób czyli zrób zmienną globalną string nick i wtedy w miejsce wywołania menu czyli menu() wstaw menu(nick);

fafa16
komentarz
komentarz

To niestety nie to. 
Napisałem kolejny, prosty program na podobnej zasadzie i dalej ten sam problem - wydaje mi się, że jest to kwestia "pozycji" funkcji. 
Czyli ta która jest napisana wyżej nie może odwoływać się do tej która jest napisana "Niżej". - to takie moje amatorskie odkrycie xD 
Może ktoś mi wytłumaczyć o co chodzi? :D

Ja nowy w te klocki troche.

pestka12
komentarz
komentarz (edytowane)
#include <iostream>
#include <fstream>
#include <windows.h>
#include <cstdlib>

using namespace std;
 void attuali();
 void apriConto();
 string nick;
 void menu(string nick="gosc")
    {
    char scegli;
    cout << "Benvenuta " << nick << endl;
    cout << "1. Apri conto" << endl;
    cout << "2. Attuali" << endl;
    cout << "3. Chiusura fiscale" << endl;
    cout << "Scegli:";
    cin >> scegli;

    switch (scegli)
    {
        case '1':
        apriConto();

        case '2':
        attuali();
    }

    }
    void attuali()
    {
        int nrTavolo, nrPersone;
        fstream plik;
        plik.open("Tavolo.txt", ios::in);
        if (plik.good()==false)
        {
            cout << "Niente da visualizzare";
            exit(0);
        }
        int linia;
        plik.close();
        cout << "Tavolo nr:" << nrTavolo << endl;
        cout << "Nr Persone: " << nrPersone << endl;
        cout << "----CONTO----";

    }
    void apriConto()
    {
        int nrTavolo, nrPersone;
        char Back;
        cout << " Nr Tavolo: ";
        cin >> nrTavolo;
        system("CLS");
        cout << "Tavolo nr:" << nrTavolo << endl;
        cout << "Nr Persone: ";
        cin >> nrPersone;
        fstream plik;
        plik.open("Tavolo.txt", ios::out | ios::app);
        plik << "Tavolo nr:" << nrTavolo << endl;
        plik << "Nr Persone: " << nrPersone << endl;
        plik << "----CONTO----";
        plik.close();

        cout << "OK \n" << "Premi 9 per tornare";
        cin >> Back;
        if (Back==9)
        {
            menu(nick);
        }
    }
    void login()
    {
        string nick, pass;
        cout << "Nickname: ";
        cin >> nick;
        cout << "Password: ";
        cin >> pass;

        if (nick == "irena" && pass == "irenafafaz")
        {
            system("CLS");
            menu(nick);
        }

        else
        {
             cout << "Nick o password sbagliata" << endl;
             login();
        }
    }

int main()
{
   login();
    return 0;
}

Oto działający kod i na początku nie dostrzegłem jednego błędu ale porządnie przeanalizowałem ten kod i dostrzegłem jeden błąd  i go poprawiłem.Oto działający kod :)

PS:Widać że jesteś nowy w te klocki jak coś to pisz jeżeli będziesz miał jeszcze z czymś problem bo ja też się uczę C++ obecnie jestem w 2 tomie Jerzego Grębosza więc trochę już umiem :D

  • Super 1
fafa16
komentarz
komentarz

Dzięki, aż wstyd mi jaki amatorski błąd. 
Nie zadeklarowana funckcja.

 

Dzięki

Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!

Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.