'->' 的基本操作数具有非指针类型 'cv::Mat' sourceAux->data.fl[(fila-1)*numColumnas+columna-1] = matA->



你好,我正在编译一个包,在编译过程中,由于数据类型转换,我遇到了一些问题。经过搜索,我发现了一些类似的问题,但这对我没有帮助。我不太擅长C++编程。我们将非常感谢您的帮助。代码超过300行,但我将只发布发生错误的部分。错误为:

aerostack_stack/stack/libraries/lib_cvgutils/src/source/matrixLib.cpp: In member function ‘int CVG::Matrix::pseudoinverse(CVG::Matrix*)’:
/home/ibrrahim/catkin_workspaces/aerostack_catkin_ws/src/aerostack_stack/stack/libraries/lib_cvgutils/src/source/matrixLib.cpp:279:13: error: base operand of ‘->’ has non-pointer type ‘cv::Mat’
sourceAux->data.fl[(fila-1)*numColumnas+columna-1] = matA->getValueData(fila,columna);
^~
/home/ibrrahim/catkin_workspaces/aerostack_catkin_ws/src/aerostack_stack/stack/libraries/lib_cvgutils/src/source/matrixLib.cpp:283:32: error: ‘CV_SVD’ was not declared in this scope
cvInvert(sourceAux,pinvAux,CV_SVD); //CV_SVD
^~~~~~
/home/ibrrahim/catkin_workspaces/aerostack_catkin_ws/src/aerostack_stack/stack/libraries/lib_cvgutils/src/source/matrixLib.cpp:283:32: note: suggested alternative: ‘CV_SSE’
cvInvert(sourceAux,pinvAux,CV_SVD); //CV_SVD
^~~~~~
CV_SSE
/home/ibrrahim/catkin_workspaces/aerostack_catkin_ws/src/aerostack_stack/stack/libraries/lib_cvgutils/src/source/matrixLib.cpp:283:5: error: ‘cvInvert’ was not declared in this scope
cvInvert(sourceAux,pinvAux,CV_SVD); //CV_SVD
^~~~~~~~
/home/ibrrahim/catkin_workspaces/aerostack_catkin_ws/src/aerostack_stack/stack/libraries/lib_cvgutils/src/source/matrixLib.cpp:288:32: error: base operand of ‘->’ has non-pointer type ‘cv::Mat’
Matrix::setValueData(pinvAux->data.fl[(fila-1)*numColumnas+columna-1],fila,columna);
^~
aerostack_stack/stack/libraries/lib_cvgutils/CMakeFiles/lib_cvgutils.dir/build.make:62: recipe for target 'aerostack_stack/stack/libraries/lib_cvgutils/CMakeFiles/lib_cvgutils.dir/src/source/matrixLib.cpp.o' failed

发生这种情况的代码部分是:

int Matrix::pseudoinverse(Matrix* matA)
{
//Comprobaciones previas
//To do
//Pinv calulation
cv::Mat pinvAux=cv::Mat(Matrix::numFilas,Matrix::numColumnas,CV_32FC1);
cv::Mat sourceAux=cv::Mat(Matrix::numFilas,Matrix::numColumnas,CV_32FC1);
for(int fila=1;fila<=numFilas;fila++)
{
for(int columna=1;columna<=numColumnas;columna++)
{
//printf("%fn",sourceAux->data.fl[1]);
sourceAux->data.fl[(fila-1)*numColumnas+columna-1] = matA->getValueData(fila,columna);
//printf("%fn",sourceAux->data.fl[(fila-1)*numColumnas+columna-1]);
}
}
cvInvert(sourceAux,pinvAux,CV_SVD); //CV_SVD
for(int fila=1;fila<=numFilas;fila++)
{
for(int columna=1;columna<=numColumnas;columna++)
{
Matrix::setValueData(pinvAux->data.fl[(fila-1)*numColumnas+columna-1],fila,columna);
}
}
//End
return 1;
}

你能给我一些提示如何处理这个数据类型转换问题吗,因为sourceAux的数据类型是cv::Mat,而data是指针float*

您的成员运算符(.(和"指针成员运算符"(->(循环错误。所以,不是:

sourceAux->data.fl[(fila-1)*numColumnas+columna-1] = matA->getValueData(fila,columna);

您应该使用:

sourceAux.data->fl[(fila-1)*numColumnas+columna-1] = matA->getValueData(fila,columna);

因为sourceAux对象(而不是指针(,而且正如您所说,它的data成员指针。您还应该在setValueData调用中进行类似的更改,再往下几行。

最新更新