错误在c ++中使用ide qt将'const'作为'this'参数传递

时间:2016-05-26 06:31:28

标签: c++ qt

我正在使用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);

是谁解决了这个问题?

2 个答案:

答案 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

对象uianimationMasse在调用位置都必须是非常量的。

相关问题