C++ Mat::at的C包装器-错误:类型为的非常量引用的初始化无效
我正在为Mat::at编写一个C包装器,并为所有的C++ Mat::at的C包装器-错误:类型为的非常量引用的初始化无效,c++,c,opencv,C++,C,Opencv,我正在为Mat::at编写一个C包装器,并为所有的编写一个。因为我添加了&,所以用于Vec4s的这个将不会运行。我必须在我所有的Mat::atC包装上为typenames这样的double,float,int等做这件事,这样我就可以使用包装来写入矩阵元素并读取它 在尝试将&添加到下面的包装中时,我得到了包装下面的第一个错误。我在下面的包装中只在函数名旁边添加了第二个-,并在包装下面得到了第二个错误…我想为什么是c++11,为什么我的编译器不接受第二个-,所以我在我的编译器参数(ubuntu tr
编写一个。因为我添加了&,所以用于Vec4s
的这个将不会运行。我必须在我所有的Mat::at
C包装上为typenames
这样的double
,float
,int
等做这件事,这样我就可以使用包装来写入矩阵元素并读取它
在尝试将&添加到下面的包装中时,我得到了包装下面的第一个错误。我在下面的包装中只在函数名旁边添加了第二个-,并在包装下面得到了第二个错误…我想为什么是c++11,为什么我的编译器不接受第二个-,所以我在我的编译器参数(ubuntu trusty上的g++)中添加了-std=c++11,并得到了第三个错误消息
唯一的规定是我必须能够使用Mat:at
wrapper写入矩阵元素……非常感谢您的帮助
Vec4s* &cv_Mat_at_Vec4s1(Mat* self, int i, int j) {
return &self->at<Vec4s>(i, j);
}
第三个错误-添加了-std=c++11
warning: returning reference to temporary
只需按值返回指针:
Vec4s* cv_Mat_at_Vec4s1(Mat* self, int i, int j) {
return &self->at<Vec4s>(i, j);
}
Vec4s*cv\u Mat\u at\u Vec4s1(Mat*self,int i,int j){
返回和自我->在(i,j);
}
如果您像您所说的那样编写C包装器,那么无论如何都不能通过引用返回
仅供参考,第一个错误是因为无法将非常量引用绑定到临时对象(在您的情况下,临时对象是使用地址
self->at(i,j);
)的结果)
第二个错误是,您猜到了,右值引用是C++11特性
第三个错误是因为您返回了对函数返回后超出范围的临时对象的引用。右值引用仍然只是引用,它们不会神奇地延长对象的生命周期
warning: returning reference to temporary
Vec4s* cv_Mat_at_Vec4s1(Mat* self, int i, int j) {
return &self->at<Vec4s>(i, j);
}