我有一个结构:
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()提供。虽然我不能想出一个解决方案,但是对于为什么会发生这种情况,任何正确方向的指针或解释都是非常感谢的。
Main:
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);
}发布于 2013-03-23 21:40:22
变化
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-23 21:41:08
QVector::at()只提供只读访问,请参阅文档:http://qt-project.org/doc/qt-4.8/qvector.html#at
这意味着您只能调用声明为"const“的方法。
但是,addNeighbours()不能是const,因为它修改了对象。
因此,您需要做的是以不同的方式访问对象,这样就不会获得const引用:
map[0].addNeighbours(tmp);https://stackoverflow.com/questions/15592371
复制相似问题