2015-09-26 50 views
0

与通使用参数作为一个unsigned int我有一些C++代码:不能参照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变量,因为我在函数内改变它的值。提前致谢!

+1

演员阵容之后,你不再有一个左值了。你不能非const引用一个铸造值。首先定义一个'unsigned int'变量。 –

+0

不要使用C风格的转换,它们适用于传统代码。 –

回答

2

当你有一个左值引用一个类型,你只能与该类型的东西初始化:

T obj = ...; 
T& ref = obj; 

派生类型的:

Derived obj = ...; 
Base& ref = obj; 

这它。您正尝试使用int初始化unsigned int&。或者,在演员阵容中,您正尝试使用临时参数初始化左值参考。那些不符合两个允许的情况之一。你只是在正确的类型传给开始:

unsigned int seed = 42; 
cout << random(seed); 

虽然,为什么random()变化的种子?似乎你应该通过价值传递它......