2013-08-31 2 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); 
} 

그렇게 const Mat&에 devectorize의 첫 번째 매개 변수를 변경하는 것이 작동합니다.