c++ - 奇怪的错误@Visual Studio C++

标签 c++ vector iterator

这个:

Polygon::Polygon(const Polygon & polygon) {
    for (vector<Point*>::iterator it = polygon._points.begin(); it != _points.end(); it++)
        _points.push_back(*it);
}

给我一​​个错误

C2440 'initializing': cannot convert from 'std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<Point *>>>' to 'std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Point *>>>

虽然这有效:

Polygon::Polygon(const Polygon & polygon) {
    vector<Point*> points = polygon._points;
    for (vector<Point*>::iterator it = points.begin(); it != _points.end(); it++)
        _points.push_back(*it);
}

最佳答案

您将 const Polygon 作为参数。在第一种情况下,您的迭代器因此是 const。在第二种情况下,您将 const polygon.vector 分配给一个局部的非常量 vector ,这使得获得非常量迭代器成为可能。

看看您的代码实际上在做什么:您正在获取一个您保证不会修改的多边形,并尝试在其中插入点。既然这就是你正在做的,最好从参数中删除 const。

关于c++ - 奇怪的错误@Visual Studio C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33712515/

相关文章:

Java 使用 Vector 类 - Matrix

c++ - 简单的图像分析

c++ - Cin >> 读取输入

C++ 反向迭代器和 Eigen

c++ - 获取基于另一个 vector 构建的 vector 成员的索引

c++ - 获取指向集合中原始数据的指针,如 &(vector[0])

python - 迭代字典并从内部字典中获取值

java - 将迭代器上的当前对象移动到列表末尾

c++ - hash_map.erase 是否会使所有迭代器无效?

c++ - 格式不匹配时停止阅读