0

我有一个结构:

struct node
{
    QPoint position;
    QVector<node> neighbours;

    void add(QPoint);
    void addNeighbours(QVector<node>);

    ...
};

使用方法:

void node::add(QPoint p)
{
    position = p;
}

void node::addNeighbours(QVector<node> n)
{
    neighbours = n;
}

但是,当我尝试使用addNeighbours时,出现以下错误:

error: C2662: 'node::addNeighbours' : cannot convert 'this' pointer from 'const node' to 'node &'
Conversion loses qualifiers

从网上看,我认为解决方案来自;使用正确的指针,并可能通过QVectors::Iterator(). 尽管我无法提出解决方案,但非常感谢任何指向正确方向的指针或解释为什么会发生这种情况。

主要的:

int main(int argc, char *argv[])
{
    QVector<node> map;
    QVector<node> tmp;
    node n;

    //Populate map
    for(int i = 0; i < 3; i++)
        for(int j = 0; j < 3;  j++)
        {
            n.add(QPoint(i,j));
            map.append(n);
        }

    //Add required nodes to tmp
    tmp.append(map.at(1));
    tmp.append(map.at(3));

    //Set the neighbour nodes of map(0) using tmp vector
    map.at(0).addNeighbours(tmp);
}
4

2 回答 2

1

改变

map.at(0).addNeighbours(tmp); // at() : returns a const reference

map[0].addNeighbours(tmp); // [] : returns a non-const reference

 

另外,最好改成addNeighbours这样:

 void node::addNeighbours(const QVector<node> &n)
于 2013-03-23T21:40:22.337 回答
0

QVector::at() 仅提供只读访问,请参阅文档:http: //qt-project.org/doc/qt-4.8/qvector.html#at

这意味着您只能调用声明为“const”的方法。

但是,addNeighbours() 不能是 const,因为它会修改对象。

So what you need to do is to access the object in a different way, so you don't get a const reference:

map[0].addNeighbours(tmp);
于 2013-03-23T21:41:08.260 回答