将结构中的Vector分配给main中的Vector内容

时间:2013-03-23 21:38:04

标签: c++ qt pointers

我有一个结构:

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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

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

但是,

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

所以你需要做的是以不同的方式访问对象,所以你没有得到const引用:

map[0].addNeighbours(tmp);