2013-08-31 131 views
1

以下是我的函数原型。错误:类型'cv :: Mat&'的非const引用无效初始化

void devectorize(Mat &vec,Mat mask,Mat& img); 

当我尝试在我的代码中调用此函数时出现以下错误。这是什么原因?

Mat V; 

for(int i=0;i<V.cols;i++) 
{ 
    devectorize(V.col(i),mask,E_img); //Error in this line 
} 
error: invalid initialization of non-const reference of type 'cv::Mat&' from an rvalue of type 'cv::Mat' 
utils.h:11:6: error: in passing argument 1 of 'void devectorize(cv::Mat&, cv::Mat, cv::Mat&)' 
+0

http://eli.thegreenplace.net/2011/12/15/understanding-lvalues-and-rvalues-in-c-and-c/ – BartoszKP

+1

我重新标记了你的问题。 – LihO

回答

3

您不能绑定一个非const引用到一个临时的。在你的情况下,devectorize的第一个参数是非const引用,而V.col(i)的返回值是临时值。此代码将工作

for (int i = 0; i < V.cols; i++) 
{ 
    Mat tmp = V.col(i); 
    devectorize(tmp, mask, E_img); 
} 

这样会改变devectorize的第一个参数const Mat&

相关问题