参照ポインターを使用して関数に値を送信しようとしていますが、完全に外部タイプのエラーが発生しました
#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への参照の初期値は左辺値でなければなりません
上記のコードを修復するために何をしなければならないのか分かりませんが、誰かがそのコードを修正する方法についてのアイデアを教えてもらえますか?ありがとう:)
_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);
_&nKByte
_は、非constへの参照にバインドできない一時的な値を作成します。
void test(float *&x)
をvoid test(float * const &x)
に変更するか、ポインターを完全にドロップしてvoid test(float &x); /*...*/ test(nKByte);
を使用することができます。
test
を&nKByte
で呼び出すと、アドレス演算子は一時値を作成しますが、通常、一時値への参照を持つことはできません。一時的。
引数に参照を使用しないか、ポインタを使用しないほうがよいでしょう。