1

我正在研究一个小的直方图类,有些东西困扰着我。这是代码:

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]必须是一个可修改的左值。我不太明白我应该在这里做什么......欢迎任何意见!:)

4

2 回答 2

4

您的 operator[] 返回一个 int,它不是一个可修改的左值(大致来说,一个 int 不能放在赋值的左侧)。

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

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

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

于 2013-09-14T09:53:41.660 回答
1
int operator [](const unsigned int n){return niz[n]++;};

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

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

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

于 2013-09-14T09:53:50.957 回答