我正在尝试重载Matrix上的Array下标运算符,但是我遇到了一个我无法理解的错误。 CMazeSquare&& operator [](const tuple& other);用于访问CMazeSquare网格**,CMazeSquares矩阵。我希望能够通过说grid [someTuple]
来访问CMazeSquare对象CMaze.h:61:17: error: expected unqualified-id before ‘&&’ token
CMazeSquare && operator [] (const tuple &other);
^
我不能为我的生活理解这里的错误。请帮忙。
#ifndef CMAZE_H
#define CMAZE_H
struct tuple
{
short x;
short y;
tuple();
tuple(const tuple &other);
tuple(short X, short Y);
tuple operator + (const tuple &other);
};
class CMaze
{
public:
private:
struct CMazeSquare
{
CMazeSquare ();
void Display (ostream & outs);
sType what;
bool vistited;
};
CMazeSquare ** grid;
CMazeSquare && operator [] (const tuple &other); //<- This is the problem
};
#endif
我认为运算符的实现看起来像这样:
//in CMaze.cpp
CMaze::CMazeSquare && CMaze::operator [](tuple &other)
{
return this[other.x][other.y];
}
答案 0 :(得分:0)
这就是operator[]
通常超载的方式:
CMazeSquare& operator[] (const tuple &other)
{
return grid[other.x][other.y];
}
const CMazeSquare& operator[] const (const tuple &other)
{
return grid[other.x][other.y];
}
您的代码存在一些问题:
首先,该定义与声明不匹配:
CMazeSquare && operator [] (const tuple &other);
vs
CMaze::CMazeSquare && CMaze::operator [](tuple &other)
请注意定义参数
中缺少const
然后你不能说this[...]
。它没有做你认为它做的事情。
最后为什么要尝试返回右值参考?你需要2个重载,一个用于const返回一个const lvalue引用,一个用于mutable返回一个可变引用。
你认为我得到的错误是因为你没有在C++11
中编译而且编译器不理解&&
。