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*'
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*.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.