2016-01-25 2 views
0

Pourquoi appeler funk (& a) donne une erreur de compilationEssayer de passer adresse à un reffernce à un pointeur

func(int * & data) {data++;} 

int main(){ 

int a = 5; 
int *p = &a; 
func(&a); //this gives a compile error 
funk(p); //this works fine 
} 

erreur: initialisation invalide de référence non-const de type 'int * &' d'un rvalue de type « int * »

+0

'funk (p); 'Où cette fonction est-elle définie? – roottraveller

+0

car 'a' est de type constant (l'adresse ne peut pas être changée). vous ne pouvez pas changer l'adresse 'a' (ce que vous faites dans la fonction). – roottraveller

+3

Vous ne pouvez pas modifier un _rvalue_. C'est ce que 'func (& a)' tente de faire. Lorsque vous passez une référence, elle doit être soit une _lvalue_ soit un _const-qualifier_. – paddy

Répondre

2

Tout comme le message d'erreur explique, le paramètre doit faire référence à une variable, et &a n'est pas une variable, il est une adresse d'une variable.