1. ホーム
  2. c++

[解決済み] non-const への参照の初期値は lvalue でなければならない。

2022-01-28 02:01:40

質問

参照ポインタを使用して関数に値を送信しようとしていますが、まったく明白でないエラーが発生しました。

#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();
}

エラー : 非恒等式への参照の初期値は lvalue でなければなりません。

私は上記のコードを修復するために何をしなければならないか全く分からない、誰かそのコードを修正する方法についていくつかのアイデアを与えることができますか?

どのように解決するのですか?

でポインタを渡すと、そのポインタは const を参照することは、そのポインタの値を変更することをコンパイラに伝えていることになります。あなたのコードはそのようなことをしませんが、コンパイラはそのように考えているか、将来的にそうする予定です。

このエラーを修正するには x 定数

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

へのポインタを代入する変数を作るか、あるいは nKByte を呼び出す前に test :

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