C++ initiële waarde van verwijzing naar non-const moet een lvalue zijn

Ik probeer waarde naar de functie te sturen met behulp van de referentieaanwijzer, maar het gaf me een volledig niet voor de hand liggende fout voor mij

#include "stdafx.h"
#include <iostream>
using namespace std;
void test(float *&x){
    *x = 1000;
}
int main(){
    float nKByte = 100.0;
    test(&nKByte);
    cout << nKByte << " megabytes" << endl;
    cin.get();
}

Fout: initiële waarde van verwijzing naar non-const moet een lvalue zijn

Ik heb geen idee wat ik moet doen om bovenstaande code te repareren, kan iemand me wat ideeën geven over hoe ik die code kan repareren? bedankt 🙂


Antwoord 1, autoriteit 100%

Als je een pointer doorgeeft aan een niet-const referentie, vertel je de compiler dat je de waarde van die pointer gaat wijzigen. Uw code doet dat niet, maar de compiler denkt van wel, of is van plan dit in de toekomst te doen.

Om deze fout op te lossen, declareert u x constant

// This tells the compiler that you are not planning to modify the pointer
// passed by reference
void test(float * const &x){
    *x = 1000;
}

of maak een variabele waaraan u een pointer toewijst aan nKByte voordat u test aanroept:

float nKByte = 100.0;
// If "test()" decides to modify `x`, the modification will be reflected in nKBytePtr
float *nKBytePtr = &nKByte;
test(nKBytePtr);

Antwoord 2, autoriteit 18%

De &nKByte creëert een tijdelijke waarde, die niet kan worden gebonden aan een verwijzing naar niet-const.

U kunt void test(float *&x) wijzigen in void test(float * const &x) of u kunt de aanwijzer gewoon helemaal laten vallen en void test(float &x); /*...*/ test(nKByte);.


Antwoord 3, autoriteit 8%

Wanneer u test aanroept met &nKByte, creëert de operator address-of een tijdelijke waarde, en u kunt normaal gesproken geen verwijzingen naar tijdelijke waarden omdat ze, nou ja, tijdelijk zijn.

Gebruik geen referentie voor het argument, of beter nog, gebruik geen pointer.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

19 + four =

Other episodes