error: ‘__gnu_cxx::__alloc_traits<std::allocator<cv::Point_<float> > >::value_type {aka class cv::Point_<float>}’ has no member named ‘pt’
point1.push_back(point1[GoodMatchePoints[i].queryIdx].pt);
^
/home/ning/vscode/imagematch.cpp:63:62: error: ‘__gnu_cxx::__alloc_traits<std::allocator<cv::Point_<float> > >::value_type {aka class cv::Point_<float>}’ has no member named ‘pt’
point2.push_back(point2[GoodMatchePoints[i].trainIdx].pt);
意思就是类没有成员变量XXA
实际上类是具有成员变量XX的
问题的原因在于工程中定义的变量和系统头文件定义的宏冲突所致:处理类定义之前,发现了同名的宏,导致在编译之前(预处理阶段)把类成员当作宏做了宏体的替换。
受上面解释的启发,猜想自己是不是对同一变量名称进行了两次定义
源代码
vector<Point2f> point1,point2;
for(int i=0;i<GoodMatchePoints.size();i++)
{
point1.push_back(point1[GoodMatchePoints[i].queryIdx].pt);
point2.push_back(point2[GoodMatchePoints[i].trainIdx].pt);
}
问题原因:
point1.push_back和point2.push_back后的point1和point2,是指将point1和point2 push到本身中去,此操作会出现如上问题。
解决方法:
应该将point1.push_back和point2.push_back后的point1和point2更改为keypoint1和keypoint2
修改后的代码为
vector<Point2f> point1,point2;
for(int i=0;i<GoodMatchePoints.size();i++)
{
point1.push_back(picpoint1[GoodMatchePoints[i].queryIdx].pt);
point2.push_back(picpoint2[GoodMatchePoints[i].trainIdx].pt);
}