我有一个类,重载输出运算符“< <”,我已经实现它。然而,编译的主要方法是“不匹配运营商< < ..”。我不知道为什么它不起作用。重载的操作符,但仍然“不匹配的操作符”错误
/*
* Accumulator.cpp
*
*
*
*/
#include <iostream>
#include "Accumulator.h"
using namespace std;
Accumulator::~Accumulator() {
// TODO Auto-generated destructor stub
}
void Accumulator::operator+=(const int nbr) {
nbrs.push_back(nbr);
}
void Accumulator::undo() {
if (!comitted) {
nbrs.pop_back();
}
}
void Accumulator::commit() {
lastCommit = nbrs;
comitted = true;
}
void Accumulator::rollback() {
nbrs = lastCommit;
}
ostream& Accumulator::operator<<(ostream &out, const Accumulator &accum){
int sum = 0;
for(int nbr : nbrs){
sum+= nbr;
}
out << sum;
return out;
}
int main() {
Accumulator accum;
char cmd;
while (cin >> cmd) {
switch (cmd) {
case 'p':
cout << "Sum is now " << accum << endl;
break;
case 'a': {
int nbr;
cin >> nbr;
accum += nbr;
break;
}
case 'u':
accum.undo();
break;
case 'c':
accum.commit();
break;
case 'r':
accum.rollback();
break;
}
}
}
对于** member ** operator <<,参数不同。你只需要右手参数。 – Incomputable
不要使其成为会员功能。 –
对于二进制成员操作符,左侧是'* this',右侧是参数(只能有一个)。您不能将流操作符作为成员进行重载。 – molbdnilo