/ / Strano errore @ Visual Studio C ++ - c ++, vettore, iteratore

Strano errore @ Visual Studio C ++ - c ++, vettore, iteratore

Questo:

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

mi dà un errore di

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 *>>>

Mentre questo funziona:

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);
}

risposte:

1 per risposta № 1

Stai prendendo un const Polygon come argomento. Nel primo caso, il tuo iteratore è quindi const. Nel secondo caso, si assegna il file polygon.vector const a un vettore locale non const, che consente di ottenere un iteratore non const.

Dai un'occhiata a ciò che sta facendo il tuo codice: stai prendendo un poligono che prometti di non modificare, e cercando di inserire punti in esso. Poiché quello è ciò che stai facendo, meglio lasciar cadere il const dall'argomento.