Последний вопрос на сегодня, обещаю. Эти указатели вызывают у меня серьезную головную боль.
У меня есть std :: list <Point
> с именем Polygon и std :: список полигонов, определенных как:
typedef std::list<Point> Polygon;
typedef std::list<Polygon> PolygonList;
// List of all our polygons
PolygonList polygonList;
Я создал метод ниже, чтобы попытаться удалить ближайшую точку из (x, y), проверив все мои полигоны в моем списке polygonList.
void deleteNearestPoint(int x, int y)
{
y = screenHeight - y;
Polygon &closestPolygon = polygonList.front();
Polygon::iterator closestPoint = closestPolygon.begin();
float closestDistance = sqrt(pow(x - closestPoint->x, 2) + pow(y - closestPoint->y, 2));
// Search PolygonList
PolygonList::iterator listIter;
Polygon::iterator iter;
for(listIter = polygonList.begin(); listIter != polygonList.end(); listIter++)
{
Polygon &tempPolygon = *listIter;
for(iter = tempPolygon.begin(); iter != tempPolygon.end(); iter++)
{
const float distance = sqrt(pow(x - iter->x, 2) + pow(y - iter->y, 2));
if (distance < closestDistance)
{
closestPolygon = *listIter;
closestPoint = iter;
closestDistance = distance;
}
}
}
closestPolygon.erase(closestPoint);
redraw();
}
Однако где-то у меня есть указатель или ссылочная переменная, которая меня облажает. Этот код компилируется, но действует очень странным образом.
Я написал оператор отладки и допустим, что в моем списке многоугольников есть 3 типа:
Полигон #: 0
Точка: (448, 43)
Точка: (469, 177)
Точка: (374, 123)
№ полигона: 1
Точка: (295, 360)
Точка: (422, 350)
Точка: (315, 266)
Точка: (295, 360)
№ полигона: 2
Точка: (143, 202)
Точка: (301, 203)
Точка: (222, 100)
Точка: (143, 202)
Теперь, допустим, я пытаюсь использовать функцию удаления, давая ей значение х / у, близкое к точке 422, 350. Желаемым результатом будет простое удаление этой точки (422, 350) из полигона # 1, но вместо этого я получаю это :
Полигон #: 0
Точка: (295, 360)
Точка: (422, 350)
Точка: (315, 266)
Точка: (295, 360)
№ полигона: 1
Точка: (295, 360)
Точка: (315, 266)
Точка: (295, 360)
№ полигона: 2
Точка: (143, 202)
Точка: (301, 203)
Точка: (222, 100)
Точка: (143, 202)
Он действительно удалил (422, 350), но у него также есть странный побочный эффект перезаписи Polygon # 0 до того, что было у Polygon # 1 до удаления его точки.
Я знаю, что неправильно использую указатель или ссылку в моем методе. Может кто-то указать, что я мог бы сделать, что вызывает это? Я думаю, это потому, что мой & closestPolygon объявлен как ссылка, но я получаю ошибки компиляции, если я пытаюсь установить его как что-либо еще.