当前位置:  开发笔记 > 编程语言 > 正文

在引用这些指针时,我是如何意外覆盖的?

如何解决《在引用这些指针时,我是如何意外覆盖的?》经验,为你挑选了1个好方法。

我保证今晚的最后一个问题.这些指针给我带来了严重的麻烦.

我有一个名为Polygon 的std :: list >和一个std ::多边形列表定义如下:

typedef std::list Polygon; 
typedef std::list 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)

现在,让我说我尝试使用删除函数给它一个x/y接近点422,350所需的结果就是它只是从Polygon#1中删除那个点(422,350)但是我得到了这个:

多边形#: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.

我知道我的方法中使用的指针或引用不正确.有人可以指出我可能会做的是什么造成这种情况?我认为这是因为我的&nearestPolygon被声明为引用,但如果我尝试将其设置为其他任何内容,则会出现编译错误.



1> MSN..:

不幸的是,你不能重新引用一个引用,即这一行:

nearestPolygon =*listIter;

将复制*listIterclosestPolygon,而不是重新引用*listIter.

编辑:要执行您想要的操作,您应该使用PolygonList::iterator而不是相应地Polygon &调整代码.

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有