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 に答える