簡體   English   中英

做-> [0]時預期的不合格ID

[英]Expected unqualified-id when doing ->[0]

我正在測試重載[]和+運算符,但是出現了預期的unqualified-id,我不知道為什么。

順便說一句,我在Xcode上使用Google測試。

錯誤發生在第6和第7行

TEST (Speed, operatorPlus) {
Speed speed_0(3, 4);
Speed speed_1(5, 6);
Speed * speed_add = speed_0 + speed_1;

ASSERT_EQ(8, speed_add->[0]);
ASSERT_EQ(10, speed_add->[1]); }

這是Speed類:

class Speed {
public:
    Speed (double x, double y) {
        this->x = x;
        this->y = y;
    }

    double getAbsSpeed () const {
        return sqrt(x * x + y * y);
    }

    double & operator [] (int index) {
        if (index == 0)
            return x;
        else if (index == 1)
            return y;
        else
            throw (std::string)"index error";
    }

    Speed * operator + (Speed & s) const {
        return new Speed(x + s[0], y + s[1]);
    }

    double & getX () {
        return x;
    }

    double & getY () {
        return y;
    }


private:
    double x = 0;
    double y = 0;
};

如果使用getX(),代碼可以正常工作,但是我不確定為什么不能使用-> []

您可以執行此操作,但是使用正確的語法。 例如,

// x is an object and a is pointer to an object
x.operator[](y); // x[y]
a->operator[](b);  // (*a)[b]
x.operator+(y);  // x + y
a->operator+(b); // (*a) + b

speed_add->operator[](0); // (*speed_add)[0]
ASSERT_EQ(8, speed_add->operator[](0));
ASSERT_EQ(10, speed_add->operator[](1));

我將修改operator+返回Speed (而不是指針)。

從@MM的評論:

const引用(或值...基本上是非const引用之外的任何東西!)要接受的參數!

double operator [] (int index) const { // modified
    // same body
}

Speed operator+(const Speed& s) const { // modified to const reference
    return Speed(x + s[0], y + s[1]);
}

然后調用它將是:

Speed speed_0(3, 4);
Speed speed_1(5, 6);
Speed speed_add = speed_0 + speed_1;

assert(8 == speed_add[0]);
assert(10 == speed_add[1]); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM