我正在尝试使用引用指针将值发送到函数中,但这给了我一个完全非显而易见的错误

#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引用传递指针时,您将告诉编译器您将要修改该指针的值。您的代码没有这样做,但是编译器认为它可以这样做,或者计划在将来这样做。

要解决此错误,请声明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);

10-07 15:35