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.