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 にすることはできません。

そのため、const 参照を取得しないように、別の方法でオブジェクトにアクセスする必要があります。

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