我有一个结构:
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);
}
答案 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);