2

我有一个获取'unsigned int *&参数的函数我想在我的代码中传输的参数位于std::vector<unsigned int> data 所以,我所做的是:我传输以下参数&data [0]但是得到编译错误:

unsigned int *' to 'unsigned int *&

什么可以解决?谢谢,

4

4 回答 4

6

&data[0]是一个右值,不能绑定到非常量引用。

你可以让它这样工作:

unsigned int *ptr = &data[0];
func(ptr);

但可能最好将函数的签名更改为

void foo(unsigned int &val); //or any other return type

如果您想将指针指向其他地方,则有一种传递对指针的引用的感觉。但在你的情况下,我认为没有理由这样做

于 2012-08-15T12:43:50.643 回答
3

该表达式&data[0]确实产生了一个 r 值,您的函数不能接受该值。

如果您不想更改您的功能,一个简单的解决方法(确保您了解它需要参考的原因):

unsigned int* ptr = &data[0];
func(ptr);
于 2012-08-15T12:44:31.787 回答
1

&data[0] 是一个右值,但函数参数类型是对指针的非常量引用。非常量引用不能绑定到右值。

在 OP 为他的问题提供更多上下文之前,很难提出一个好的解决方法。

于 2012-08-15T12:42:41.930 回答
1

unsigned int *argument = &data[0];
call_function(argument);

请注意,该函数可能希望更改 的值argument,因此它可能希望您随后编写:

data.assign(argument, argument + new_length);
于 2012-08-15T12:45:40.117 回答