Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: viittaukset funktiokutsussa

tkok [14.12.2008 20:36:20]

#

Moi
Harjoittelin tässä vähän olio-ohjelmoitia ja viittauksi/osoittimia

Ohjelma ei kuitenkaan toimi:

#include <iostream>
class Pelaaja
{
	public:
	int ID;
};

void muuta(Pelaaja& taulu);

int main (int argc, char * const argv[]) {
	Pelaaja pelaajat[10];
	muuta(pelaajat); //tarkoitus olisi kutsua muuta-funktiota niin että taulu viittaus viittaisi pelaajat[]-tauluun
	return 0;
}

void muuta(Pelaaja& taulu){	}

Virhe tulee rivillä muuta(pelaajat); ja void muuta(Pelaaja& taulu);
Liittynee jotenkin osoittimen käyttöön(errorenkku vähän ruosteessa niin en ymmärrä):
error: invalid initialization of non-const reference of type 'Pelaaja&' from a temporary of type 'Pelaaja*'

Metabolix [14.12.2008 20:54:21]

#

Koodissasi symbolin "pelaajat" tyyppi on "10 pelaajan taulu", viittauksesi on kuitenkin viittaus yhteen pelaajaan. Tuollaisessa tapauksessa viittaukseen tarvitaan sulkuja:

int a[10];
int (&b) [10] = a;
b[2] = 10; // a[2] = 10;

Viittauksessa sinänsä ei ole kuitenkaan järkeä, koska osoitin ajaa taulukon kanssa saman asian:

int a[10];
int *b = a;
b[2] = 10; // a[2] = 10;

Virhe sanoo, että koodissasi on Pelaaja* ja pitäisi olla Pelaaja& (koska funktiosi sellaisen ottaa). Tietenkin tässä tapauksessa tämä pitää osata tulkita toisin päin, eli funktiosi haluaisi Pelaaja&:n, vaikka sen pitäisi oikeasti haluta Pelaaja*.

tkok [14.12.2008 20:59:44]

#

Metabolix kirjoitti:

Viittauksessa sinänsä ei ole kuitenkaan järkeä, koska osoitin ajaa taulukon kanssa saman asian:

int a[10];
int *b = a;
b[2] = 10; // a[2] = 10;

Way to do.
Aivan tosiaa, kiitos, nyt toimii.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta