web-dev-qa-db-ja.com

非constへの参照のC ++初期値は左辺値でなければなりません

参照ポインターを使用して関数に値を送信しようとしていますが、完全に外部タイプのエラーが発生しました

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

エラー:非constへの参照の初期値は左辺値でなければなりません

上記のコードを修復するために何をしなければならないのか分かりませんが、誰かがそのコードを修正する方法についてのアイデアを教えてもらえますか?ありがとう:)

32
Mohd Shahril

_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);
42
dasblinkenlight

_&nKByte_は、非constへの参照にバインドできない一時的な値を作成します。

void test(float *&x)void test(float * const &x)に変更するか、ポインターを完全にドロップしてvoid test(float &x); /*...*/ test(nKByte);を使用することができます。

8
wilx

test&nKByteで呼び出すと、アドレス演算子は一時値を作成しますが、通常、一時値への参照を持つことはできません。一時的。

引数に参照を使用しないか、ポインタを使用しないほうがよいでしょう。