我正在使用C++
在Qt
中开发一个应用程序,我有一个类:AnimationMasse
class AnimationMasse
{
public:
int etat ;
double x ;
double y ;
public:
AnimationMasse();
void setx(double XX);
};
AnimationMasse::AnimationMasse()
{
etat = 0 ;
x = -0.54 ;
y = -0.2 ;
}
void AnimationMasse::setx(double XX){
x = x+XX;
}
我创造了一个对象:
QVector <AnimationMasse> Masse;
AnimationMasse x ;
Masse.append(x) ;
问题是:如果我这样做:
ui->animation->Masse.at(0).setx(1);
在我看来,错误:
是谁解决了这个问题?错误:将'const AnimationMasse'作为'void'的'this'参数传递 AnimationMasse :: setx(double)'丢弃限定符[-fpermissive]
UI-&GT; animation-&GT; Masse.at(0).setx(1);
答案 0 :(得分:7)
正如您在Qt文档中看到的那样http://doc.qt.io/qt-5/qvector.html#at函数at
返回const引用,因此您无法调用setx(1)
。在这种情况下,您可以使用QVector
类的operator []:
T & operator[](int i)
简单示例:
#include "QCoreApplication"
#include "QVector"
#include "QtDebug"
class AnimationMasse
{
private:
int etat ;
double x ;
double y ;
public:
AnimationMasse()
: etat(0)
, x(-0.54)
, y(-0.2)
{
}
double getx(){return x;}
void setx(double XX){ x += XX; }
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QVector <AnimationMasse> Masse;
AnimationMasse x;
Masse.append(x);
qDebug() << Masse[0].getx();
Masse[0].setx(1);
qDebug() << Masse[0].getx();
return a.exec();
}
答案 1 :(得分:3)
ui->animation->Masse.at(missajour).setx(1);
Masse
似乎是vector
,目前它是一个const
对象,因此退回const_reference
。然后,setx
左侧的表达式变为const AnimationMasse
。因此,您无法拨打setx
。
对象ui
,animation
和Masse
在调用位置都必须是非常量的。