【发布时间】:2014-03-18 07:14:58
【问题描述】:
我正在为 Mat::at 编写一个 C 包装器,并且正在为所有 <typename> 编写一个包装器。 Vec4s 的这个不会运行,因为我添加了 &。我必须在所有typenames 的typenames 包装器上执行此操作,例如double、float、int 等,这样我就可以使用包装器写入矩阵元素以及读取它。
在尝试将 & 添加到下面的包装器时,我在包装器下面遇到了第一个错误。我在下面的包装器中仅在函数名称旁边的第一个 & 旁边添加了第二个 & 并在包装器下面得到了第二个错误...我想为什么是 c++11 的东西,为什么我的编译器不接受第二个&,所以我将 -std=c++11 添加到我的编译器参数(ubuntu 上的 g++ 可信)并收到第三条错误消息...
唯一的规定是我必须能够使用 Mat:at 包装器写入矩阵元素...非常感谢任何帮助。
Vec4s* &cv_Mat_at_Vec4s1(Mat* self, int i, int j) {
return &self->at<Vec4s>(i, j);
}
第一个错误 - 原始
error: invalid initialization of non-const reference of type
‘cv::Vec4s*& {aka cv::Vec<short int, 4>*&}’ from an rvalue of type
‘cv::Vec<short int, 4>*’
return &self->at<Vec4s>(i, j);
第二个错误:没有-std=c++11
error: expected unqualified-id before ‘&&’ token
第三个错误 - 添加了-std=c++11
warning: returning reference to temporary
【问题讨论】: