我有一个'unsigned int *&争论
我想在代码中传输的参数位于std::vector<unsigned int> data
所以,我所做的是:我转移以下参数&amp; data [0]
但是得到编译错误:
unsigned int *' to 'unsigned int *&
什么可以解决? 谢谢,
答案 0 :(得分:6)
&data[0]
是一个右值,不能绑定到非const引用。
你可以这样做:
unsigned int *ptr = &data[0];
func(ptr);
但是,将函数的签名更改为
可能更好void foo(unsigned int &val); //or any other return type
如果您想在其他位置创建指针点,则可以传递对指针的引用。但我认为没有理由这样做
答案 1 :(得分:3)
表达式&data[0]
确实产生了一个r值,你的函数无法接受它。
如果您不想改变您的功能,请进行简单的解决方法(确保您了解需要参考的原因):
unsigned int* ptr = &data[0];
func(ptr);
答案 2 :(得分:1)
&amp; data [0]是一个rvalue,但函数参数类型是指针的非常量引用。非const引用不能绑定到右值。
在OP为他的问题提供更多背景之前,很难建议一个好的解决方法。
答案 3 :(得分:1)
写
unsigned int *argument = &data[0];
call_function(argument);
请注意,该函数可能希望更改argument
的值,因此可能会要求您编写:
data.assign(argument, argument + new_length);