矩阵

时间:2016-10-29 17:41:46

标签: c++ multidimensional-array

我正在尝试重载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];
}

1 个答案:

答案 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中编译而且编译器不理解&&