大家在使用OpenCV的时候经常会遇到各种各样的错误,对于一些简单的基本上能够从报错信息查找到原因,但是往往也会遇到很难发现错误的地方,因为C/C++是一种编译语言,不像python/matlab直接可以找到出错的地方。
出错的地方编译不通过,出现“D:\opencv3_4_2\opencv\build\include\opencv2/core/traits.hpp(366): error C2039: “type”: 不是“cv::DataType<T>”的成员
with
[
T=cv::MatCommaInitializer_<float>
] (编译源文件 getSequence\SequenceRecognition.cpp)”
对于上面通用的解决方案有很多,但都不行,如:http://answers.opencv.org/question/183163/traitshpp-type-is-not-a-member-compilation-error/
https://github.com/ros-perception/image_pipeline/issues/308
我的解决方案是:对于新加的代码分段进行编译,找出出错的大致位置,直到准确定位错误语句。
最后错误的语句为:X.push_back((Mat_<float>(1, 1) << 1.0)); 其中X为Mat类型,CV_32FC1,size为1*3,但这句话就是编译不过去。后来分开写成下面2条语句就编译通过:
Mat pushMat = (Mat_<float>(1, 1) << 1.0);
X.push_back(pushMat);