Visibilità attributi in una classe e uso in una funzione

di Anonimizzato31590 il
3 risposte
Buongiorno a tutti, chiedo un piccolo aiuto.
Nel programma che sto testando, ho creato una classe per gestire i dati di una squadra, e uso una funzione per simulare una partita. Alla funzione (partita) passo i due oggetti squadra e nella funzione dovrebbero essere aggiornate le proprietà di ogni squadra.
Quello che mi succede però e che i dati sono correttamente aggiornati finchè sono nella funzione partita, ma alla sua uscita (nel main) quegli aggiornamento sono spariti.
Ipotizzo un problema con gli scope, ma non capisco dove possa essere.
Qualcuno può darmi una dritta?

Grazie.
Di seguito, il codice che ho usato.
#include <stdlib.h>
#include <iostream>

using namespace std;

class Squadra{
public:
    string nome;
    int v,p,s;
    int gf,gs;
    Squadra(string n);
    void status();
};

void partita(Squadra s1, Squadra s2);

int main()
{
    Squadra i("Inter"),m("Milan");

    partita(i,m);
    cout << "Dopo partita:" << endl;
    i.status();
    m.status();
    return 0;
}

void partita(Squadra s1, Squadra s2)
{
    int g1, g2;

    g1=2;
    g2=3;
    cout << s1.nome << " " << g1 << "    " << s2.nome << " " << g2 << endl;
    s1.gf=s1.gf+g1;    s1.gs=s1.gs+g2;
    s2.gf=s2.gf+g2;    s2.gs=s2.gs+g1;
    if(g1>g2)
    {
        s1.v++;    s2.s++;

    }else if(g1==g2)
    {
        s1.p++;    s2.p++;

    }else
    {
        s2.v++;    s1.s++;
    }
 s1.status();
 s2.status();

}

Squadra::Squadra(string n)
{
    nome=n;
    v=0; p=0; s=0; gf=0; gs=0;
}

void Squadra::status()
{
    cout << nome << ": " ;
    cout << "Giocate: " << v+p+s ;
    cout << " V: " << v << " - P: " << p << " - S: " << s << " - Fatti: " << gf << " - Subiti: " << gs << endl;
}

3 Risposte

  • Ciao, semplicemente a partita() stai passando una copia di i e m; se vuoi modificare direttamente i e m devi passarli alla funzione partita() per riferimento e non per valore come stai facendo.
  • Grazie, mi serviva giusto un input, a quanto pare.
    A buon rendere!
  • Di niente!
Devi accedere o registrarti per scrivere nel forum
3 risposte