我正在研究一个小的直方图课程,有些东西让我烦恼。这是代码:
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]
必须是可修改的左值。我不太明白我该怎么办呢...欢迎提出任何意见! :)
答案 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++
相同。)