表达式必须是可修改的lValue:`(x,y)= 0;`

时间:2016-12-20 19:23:21

标签: c++ arrays

我有一个模板类Array,它实现了一个二维数组。数组类包含一个重载的operator(),它返回对从零开始的位置(列x,行y​​)的元素的引用:

const T & operator () (int x, int y) const {
        size_t loc = y*width + x;
        return *(buffer + loc);
    }

我还有一个派生类图像,它表示ppm图像的通用数据容器。图像类包含一个setPixel方法,用于设置(x,y)像素的RGB值:

void setPixel(unsigned int x, unsigned int y) {     
            size_t locpixel = y*width + x;
            size_t componentofpixel = locpixel * 3;
            (x, y) = 0;
            (x, y) + 1 = 1;
            (x, y) + 2 = 0;
    }

因此,当我编译它时,在setPixel中显示一个错误,表达式必须是可修改的lValue。有没有办法在我的setPixel方法中使用operator()来获取数组中的下一个元素?

1 个答案:

答案 0 :(得分:0)

与成员函数不同,运算符需要有一个实例才能使用。现在当你执行(x, y)时,你调用逗号运算符,编译器计算表达式x,丢弃它,然后计算表达式y并返回产生的结果。该返回值是一个临时值,您无法分配它,因为它是一个内置的int类型。

为了调用函数调用操作符,你需要给它一个实例来调用它。在这种情况下,您可以使用

(*this)(x, y) = 0;
(*this)(x, y) + 1 = 1;
(*this)(x, y) + 2 = 0;

现在解决了调用您为类型定义的operator()