1. ホーム
  2. スクリプト・コラム
  3. その他

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

2022-01-01 10:55:21

質問

参照ポインタを使用して、関数に値を送信したいのですが、コードは以下の通りです。

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

実行すると、エラーが発生します。

Error : initial value of reference to non-const must be an 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);