void PointCloud::Create(std::vector<std::vector<cv::Point3d>> threeDPointSpace){
std::vector<std::vector<cv::Point3d>>::iterator row;
std::vector<cv::Point3d>::iterator col;
for (row = threeDPointSpace.begin(); row != threeDPointSpace.end(); row++) {
for (col = row->begin(); col != row->end(); col++) {
cv::Point3d thisOne = col._Getcont; // error reported here
vertices.push_back(VertexFormat(glm::vec3(thisOne.x, thisOne.y, thisOne.z), glm::vec4(1.0, 0.0, 1.0, 1.0)));
totalData++;
}
}
}
错误消息显示:
严重级代码说明项目文件行 错误C3867&#39; std :: _ Iterator_base12 :: _ Getcont&#39 ;:非标准语法; 使用&#39;&amp;&#39;创建指向成员的指针
这是什么意思?我怎样才能解决这个问题?我没有正确使用此迭代器架构吗?我试图访问这些元素。
答案 0 :(得分:5)
您尝试使用函数std::vector<cv::Point3d>::iterator::_Getcont
而不调用它(()
)或使用地址语法(&
),这确实是非标准的。< / p>
cv::Point3d thisOne = col._Getcont();
但是,这个函数来自Visual Studio标准库实现的内部(领先_
,而cppreference.com's documentation of the public interface for RandomAccessIterators中缺少提及是主要线索);我不知道你为什么要尝试使用它。只需取消引用迭代器,就像其他人一样:
const cv::Point3d& thisOne = *col;
答案 1 :(得分:1)
由于col
是std::vector<cv::Point3d>::iterator
,您必须使用
Point3d
访问属性
cv::Point3d thisOne = col->_Getcont;
如果这是一个方法,请确保实际调用方法
cv::Point3d thisOne = col->_Getcont();
答案 2 :(得分:1)
你不应该使用吗?
cv::Point3d thisOne = col->_Getcont;
或者_Getcont是成员函数
cv::Point3d thisOne = col->_Getcont();
或者
cv::Point3d thisOne = ( *col )._Getcont;
cv::Point3d thisOne = ( *col )._Getcont();
或许你可以简单地写一下
cv::Point3d thisOne = *col;
因为左对象的类型与表达式*col
的类型相同。
在这种情况下,函数可以写成
void PointCloud::Create(std::vector<std::vector<cv::Point3d>> threeDPointSpace)
{
for ( auto &row : threeDPointSpace )
{
for ( auto &thisOne : row )
{
vertices.push_back(VertexFormat(glm::vec3(thisOne.x, thisOne.y, thisOne.z), glm::vec4(1.0, 0.0, 1.0, 1.0)));
totalData++;
}
}
}