>我有一个函数,它得到'unsigned int *& argument。我要在代码中传输的参数位于std::vector<unsigned int> data
所以,我做的是:我传输以下参数和数据[0]但是得到编译错误:
unsigned int *' to 'unsigned int *&
可以解决什么方法?谢谢
&data[0]
是一个右值,不能绑定到非常量引用。
您可以使其工作方式:
unsigned int *ptr = &data[0];
func(ptr);
但最好将函数的签名更改为
void foo(unsigned int &val); //or any other return type
有一种传递对指针的引用的感觉,以防您想在其他地方建立指针指向。但我看不出在你的情况下这样做的理由
&data[0]
确实会产生一个 r 值,您的函数无法接受该值。
如果您不想更改函数,这是一个简单的解决方法(确保您了解需要引用的原因):
unsigned int* ptr = &data[0];
func(ptr);
写入
unsigned int *argument = &data[0];
call_function(argument);
请注意,该函数可能期望更改 argument
的值,因此它可能需要您随后编写:
data.assign(argument, argument + new_length);
&data[0] 是一个右值,但函数参数类型是对指针的非常量引用。非常量引用不能绑定到右值。
在 OP 为他的问题提供更多上下文之前,很难提出一个好的解决方法。