PDA

Visualizza la versione completa : [C++] Passaggio puntatore tra funzioni


giovannimarino
26-08-2011, 10:11
Salve vorrei fare la stampa dei valori della lista...credo che la funzione stampasquadra vada bene però non so come passare il puntatore testa dalla funzione aggiuntaGiocatore a stampasquadra...



#include <iostream>

using namespace std;
struct giocatore
{
string nomegiocatore;
string cognomegiocatore;
int abilita;
giocatore*nextgiocatore;
};
class squadra
{
public:
squadra()
{
testa=NULL;
}
void assegnamentoNome();
void assegnamentoNomeSponsor();
void aggiuntaGiocatore();
void stampasquadra();
int scelta;
private:
string nomesquadra;
string sponsor;
giocatore*testa;
string valore;
char opzione;

};
void squadra::assegnamentoNome()
{
cout<<"Che nome vuoi dare alla tua squadra? "<<endl;
cin>>nomesquadra;
}
void squadra::assegnamentoNomeSponsor()
{
cout<<"Qual è il tuo sponsor?"<<endl;
cin>>sponsor;
}
void squadra::aggiuntaGiocatore()
{
do
{

giocatore*ptr=new giocatore;
giocatore*temp=new giocatore;
cout<<"Inserisci il nome del giocatore:"<<endl;
cin>>ptr->nomegiocatore;
cout<<"Inserisci il cognome del giocatore:"<<endl;
cin>>ptr->cognomegiocatore;
cout<<"Qual e l'abilità del tuo giocatore?"<<endl;
cin>>ptr->abilita;
ptr->nextgiocatore=NULL;
if(testa==NULL)
testa=ptr;
else
{
temp=testa;
testa=ptr;
testa->nextgiocatore=temp;
}
cout<<"Vuoi inserire un nuovo giocatore?"<<endl;
cin>>opzione;
}while(opzione=='s');
}
void squadra::stampasquadra()
{
do
{
cout<<testa->nextgiocatore->nomegiocatore<<endl;
valore=testa->nextgiocatore->nomegiocatore;
}while(valore==NULL);
}


int main()
{
do
{

squadra miasquadra;
cout<<"Cosa desideri fare?"<<endl;
cout<<"1)Inserisci il nome della squadra"<<endl;
cout<<"2)Inserisci il nome dello sponsor"<<endl;
cout<<"3)Inserisci un giocatore"<<endl;
cout<<"4)Visualizza la squadra"<<endl;
cin>>miasquadra.scelta;
switch(miasquadra.scelta)
{
case 1:
miasquadra.assegnamentoNome();
break;
case 2:
miasquadra.assegnamentoNomeSponsor();
break;
case 3:
miasquadra.aggiuntaGiocatore();
break;
default:
cout<<"Scelta sbagliata";
}
}while(true);
return 0;
}

sebaldar
26-08-2011, 11:09
non hai bisogno di "passare" la variabile testa alla funzione, in quanto è membro della classe.

Se interpreto bene quello che vuoi fare prova così




void squadra::stampasquadra()
{

giocatore * player = testa ;

while ( player ) {

cout << player->nomegiocatore << endl;
player = player->nextgiocatore;

}

}

jonnykaraoke
26-08-2011, 12:43
ok compila! ma non mi stampa...aggiungo il giocatore con l'apposita funziona ma quando parte la funzione di stampa il programma si chiude...



#include <iostream>

using namespace std;
struct giocatore
{
string nomegiocatore;
string cognomegiocatore;
int abilita;
giocatore*nextgiocatore;
};
class squadra
{
public:
squadra()
{
testa=NULL;
}
void assegnamentoNome();
void assegnamentoNomeSponsor();
void aggiuntaGiocatore();
void stampasquadra(giocatore*&testa);
int scelta;
private:
string nomesquadra;
string sponsor;
giocatore*testa;
string valore;
char opzione;

};
void squadra::assegnamentoNome()
{
cout<<"Che nome vuoi dare alla tua squadra? "<<endl;
cin>>nomesquadra;
}
void squadra::assegnamentoNomeSponsor()
{
cout<<"Qual è il tuo sponsor?"<<endl;
cin>>sponsor;
}
void squadra::aggiuntaGiocatore()
{
do
{

giocatore*ptr=new giocatore;
giocatore*temp=new giocatore;
cout<<"Inserisci il nome del giocatore:"<<endl;
cin>>ptr->nomegiocatore;
cout<<"Inserisci il cognome del giocatore:"<<endl;
cin>>ptr->cognomegiocatore;
cout<<"Qual e l'abilità del tuo giocatore?"<<endl;
cin>>ptr->abilita;
ptr->nextgiocatore=NULL;
if(testa==NULL)
testa=ptr;
else
{
temp=testa;
testa=ptr;
testa->nextgiocatore=temp;
}
cout<<"Vuoi inserire un nuovo giocatore?"<<endl;
cin>>opzione;
}while(opzione=='s');
}
void squadra::stampasquadra(giocatore*&testa)
{
do
{
cout<<testa->nextgiocatore->nomegiocatore<<endl;
}while(testa->nextgiocatore->nomegiocatore!="0");
}


int main()
{
do
{

squadra miasquadra;
cout<<"Cosa desideri fare?"<<endl;
cout<<"1)Inserisci il nome della squadra"<<endl;
cout<<"2)Inserisci il nome dello sponsor"<<endl;
cout<<"3)Inserisci un giocatore"<<endl;
cout<<"4)Visualizza la squadra"<<endl;
cin>>miasquadra.scelta;
switch(miasquadra.scelta)
{
case 1:
miasquadra.assegnamentoNome();
break;
case 2:
miasquadra.assegnamentoNomeSponsor();
break;
case 3:
miasquadra.aggiuntaGiocatore();
break;
case 4:
miasquadra.stampasquadra();
break;

default:
cout<<"Scelta sbagliata";
}
}while(true);
return 0;
}

alka
26-08-2011, 13:17
Originariamente inviato da jonnykaraoke
ok compila! ma non mi stampa...aggiungo il giocatore con l'apposita funziona ma quando parte la funzione di stampa il programma si chiude...


jonnykaraoke, se sei sempre giovannimarino come sembra, ti ricordo che non è ammesso avere più di un account utente attivo.

jonnykaraoke
26-08-2011, 14:27
del primo account non ricordavo la password è ho acceduto con jonnykaraoke...su vuoi puoi eliminare giovannimarino...mi scuso del problema...da adesso accedo con jonnykaraoke

sebaldar
26-08-2011, 14:41
stampasquadra non deve avere argomenti.

Prova ad inserirlo pari pari come te la ho postata.



void squadra::stampasquadra()
{

giocatore * player = testa ;

while ( player ) {

cout << player->nomegiocatore << endl;
player = player->nextgiocatore;

}

}


Inoltre in

void squadra::stampasquadra(giocatore*&testa)

non capisco cosa vuoi fare , sicuro che il compilatore non ti dia errore ????

ciao

sergio[

jonnykaraoke
26-08-2011, 15:06
si scusa...ho incollato il codice vecchio....ho provato ma niente....

sebaldar
26-08-2011, 15:28
inizia a spostare nel main la dichiaraizione di miasquadra fuori dal loop




int main()
{

squadra miasquadra;

do {

cout<<"Cosa desideri fare?"<<endl;
cout<<"1)Inserisci il nome della squadra"<<endl;
cout<<"2)Inserisci il nome dello sponsor"<<endl;
cout<<"3)Inserisci un giocatore"<<endl;
cout<<"4)Visualizza la squadra"<<endl;

cin>>miasquadra.scelta;

switch(miasquadra.scelta) {

case 1:
miasquadra.assegnamentoNome();
break;
case 2:
miasquadra.assegnamentoNomeSponsor();
break;
case 3:
miasquadra.aggiuntaGiocatore();
break;
case 4:
miasquadra.stampasquadra();
break;

default:
cout<<"Scelta sbagliata";

}

} while ( true );

return 0;

}

jonnykaraoke
27-08-2011, 13:44
apposto! ti ringrazio!!

Loading