我正在尝试使用引用指针将值发送到函数中,但它给了我一个完全外来类型的错误
#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的引用的初始值必须是左值
我不知道我必须做些什么来修复上面的代码,有人可以给我一些关于如何修复代码的想法吗?谢谢:))
答案 0 :(得分:41)
当您通过非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);
答案 1 :(得分:6)
&nKByte
创建一个临时值,该值不能绑定到对非const的引用。
您可以将void test(float *&x)
更改为void test(float * const &x)
,也可以完全删除指针并使用void test(float &x); /*...*/ test(nKByte);
。
答案 2 :(得分:3)
当您使用test
致电&nKByte
时,地址运营商会创建临时值,而您通常无法引用临时值,因为它们是,好吧,暂时的。
要么不对参数使用引用,要么更好但不要使用指针。