[英]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.