varA += double + varB;

jkallup

Erfahrenes Mitglied
hallo
habe folgenden code:
C++:
class MyQVariant: public QVariant
{
public:
    MyQVariant() { }
    MyQVariant(double val) { this->setValue(val); }

    MyQVariant operator += (double rhs)
    {
        MyQVariant tmp = *this;
        double v = this->toDouble();
        v += rhs;
        tmp.setValue(v);
        return tmp;
    }

    MyQVariant operator -= (double rhs)
    {
        MyQVariant tmp = *this;
        double v = this->toDouble();
        v -= rhs;
        tmp.setValue(v);
        return tmp;
    }

    MyQVariant operator += (MyQVariant& rhs)
    {
        MyQVariant tmp = *this;
        double v1 = this->toDouble();
        double v2 = rhs.toDouble();
        v1 += v2;
        tmp.setValue(v1);
        return tmp;
    }

    MyQVariant operator = (double rhs)
    {
        MyQVariant tmp = *this;
        tmp.setValue(rhs);
        return tmp;
    }
};

MyQVariant operator - (MyQVariant& lhs, double rhs)
{
    MyQVariant tmp(lhs);
    tmp -= rhs;
    return tmp;
}
wenn ich nun hergehe und folgendes mache:
MyQVariant varA = 1.00;
MyQVariant varB = 2.00;
varB += 3.0 + 1.00; geht zu compilieren
varB += 3.0 + 1.00 - varA; geht nicht zu compilieren

wo steckt der fehler oder was fehlt?
 
Zuletzt bearbeitet von einem Moderator:
Hi

Welcher Fehler? :rolleyes:

Bei den ganzen =-Varianten (= += -=) wäre die Rückgabe einer Referenz sehr sinnvoll.
Und es gibt keinen Grund, im Inneren so umständlich mit Pointern herumzutun.
zB.
C++:
MyQVariant& operator += (double rhs)
{
    setValue(toDouble() + rhs);
    return *this;
}
Je nach Inhalt von setValue und toDouble kann man das eventuell noch vereinfachen.

Aber keine Referenz bei Nichtgleich-Sachen (+ - ...)!

Es fehlen weiters: Copykonstruktor, Cast-Operator und einige Gegenteile der Operatoren
(Bei einem += wäre auch ein -= mit selben Parametertypen schön...usw.)
 
Zurück