可修改的左值?

时间:2013-09-14 09:49:08

标签: c++ algorithm

我正在研究一个小的直方图课程,有些东西让我烦恼。这是代码:

class cHistogram{
public:
    cHistogram();
    cHistogram(int x);
    friend ostream& operator<<(ostream& ost, cHistogram& obj);
    int operator()(const unsigned int n){return niz[n];};
    int operator [](const unsigned int n){return niz[n]++;};

private:
    int niz[100];
    int total;


};

int main() {
   cHistogram h(100);
   while(true){
      unsigned int n;
      std::cin >> n;
      if(0 == n) break;
      h[n]++;
   }
   std::cout << h;
}

问题在于,在尝试编译时,它告诉我h[n]必须是可修改的左值。我不太明白我该怎么办呢...欢迎提出任何意见! :)

2 个答案:

答案 0 :(得分:4)

你的operator []返回一个int,它不是一个可修改的左值(大概一个int不能放在赋值的左边)。

您的operator []的定义也非常奇怪,为什么要编写递增的operator []?这是你通常写这个

的方法
int& operator [](const unsigned int n){return niz[n];}

现在你的代码应该可以工作了,因为你要返回一个可以递增的引用。

答案 1 :(得分:1)

int operator [](const unsigned int n){return niz[n]++;};

这是非常错误的。您应该提供对数组元素引用的访问:

int& operator[](const unsigned int n){ return niz[n]; }

而不是元素的值(这是l值,因此键入h[n]++将与2++相同。)