2016-05-26 10 views
1

ich eine Anwendung in C++ mit Qt entwickle, habe ich eine Klasse: AnimationMasseFehler Gang 'const' "dieses Argument in C++ mit ide qt

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; 
} 

ich ein objet erstellt bin:

QVector <AnimationMasse> Masse; 
AnimationMasse x ; 
Masse.append(x) ; 

Das Problem ist: wenn ich tun:

ui->animation->Masse.at(0).setx(1); 

zu m scheint e, Fehler:

error: passing 'const AnimationMasse' as 'this' argument of 'void AnimationMasse::setx(double)' discards qualifiers [-fpermissive]

ui->animation->Masse.at(0).setx(1);

wer löste dieses Problem?

+2

Der Compiler Fehlermeldung zeigt deutlich, dass Sie ein 'const' irgendwo widersprechen. Die Code-Snippets, die Sie bisher zur Verfügung gestellt haben, haben überhaupt kein 'const'. Stellen Sie * echten * Code, nicht erfundene Skizzen zur Verfügung. – AnT

+1

Anscheinend wird "Masse" als "const" deklariert. –

+0

Ich editing den Code, ich bin der echte Code erstellen. – BkarimCe

Antwort

7

Wie Sie in Qt Dokumentation http://doc.qt.io/qt-5/qvector.html#at Funktion at Rückkehr const Referenz sehen, so können Sie setx(1) nicht aufrufen. Sie können in diesem Fall Operator [] von QVector Klasse verwenden:

T & operator[](int i) 

Einfaches Beispiel:

#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(); 
} 
+0

Ich verstehe nicht. T & U-> Animation-> Masse.at (0) .setx (1); ??? – BkarimCe

+2

Ersetzen Sie ui-> animation-> Masse.at (0) .setx (1) auf ui-> animation-> Masse [0] .setx (1) –

+0

@BkarimCe es klingt wie Sie nicht bewusst sind, was 'const 'ist. Es wurde wahrscheinlich von Konstanten abgeleitet, ist aber gewachsen von nur konstanten Daten zu meinen Daten, die Sie nicht ändern können.Es könnte konstant sein, aber es könnten nur Daten mit einer Einschränkung sein, um versehentliche Schäden zu vermeiden. Das heißt, etwas wie 'setx' aufzurufen, um die Daten zu ändern, wird vom Compiler abgelehnt. Um dies zu umgehen, müssen Sie [einen Accessor wie 'operator []'] (http://doc.qt.io/qt-5/qvector.html#operator-5b-5d) verwenden, der kein 'zurückgibt const' Referenz. – user4581301

3
ui->animation->Masse.at(missajour).setx(1); 

Masse scheint ein vector, zu sein und zur Zeit ist es ein const Objekt und damit eine const_reference returing. Dann wird der Ausdruck links von setx zu const AnimationMasse. Daher können Sie setx nicht aufrufen.

Die Objekte ui, animation und Masse müssen am Rufort alle nicht konstant sein.

+0

ich bin editing den code, ich bin der reelle code erstellen. – BkarimCe

+0

Der Vektor Masse ist nicht konstant – BkarimCe

+0

Ich denke, Sie sind nicht aufgepasst. Ich stimme zu, dass "Masse" nicht konstant sein darf, sondern "Animation" oder "ui" sein kann. Oder die Methode, in der "ui" ein Klassenmitglied ist, kann eine "const" -Funktion sein. – Ajay

Verwandte Themen