我有一些C ++代码:
#include <bjarne/std_lib_facilities.h>
double random(unsigned int &seed);
int main ()
{
int seed = 42;
cout << random((unsigned int)seed) << endl;
}
double random(unsigned int &seed)
{
const int MODULUS = 15749;
const int MULTIPLIER = 69069;
const int INCREMENT = 1;
seed = (( MULTIPLIER * seed) + INCREMENT) % MODULUS;
return double (seed)/MODULUS;
}
我在尝试编译时遇到错误:
error: invalid initialization of non-const reference of type ‘unsigned int&’ from an rvalue of type ‘unsigned int’
cout << random((unsigned int)seed) << endl;
我不明白为什么我不能使用int seed
作为函数random
的参数。我甚至尝试将type-casting
int作为参数的unsigned int。我无法将unsigned int &seed
参数设为const
变量,因为我在函数中更改了它的值。提前谢谢!
答案 0 :(得分:2)
如果您对某个类型有左值引用,则只能使用类型的内容对其进行初始化:
T obj = ...;
T& ref = obj;
或派生类型:
Derived obj = ...;
Base& ref = obj;
就是这样。您正尝试使用unsigned int&
初始化int
。或者,使用强制转换,您尝试使用临时值初始化左值引用。那些不适合两种允许的情况。您只需要传递正确的类型即可:
unsigned int seed = 42;
cout << random(seed);
虽然,为什么random()
会改变种子?好像你应该按价值传递它......