我的任务是重载运算符<<和>>在Stack类中,它们可以从Stack中添加或提取元素。例如:
stack << 1 << 2 << 3;
stack >> a >> b >> c; // a==3, b==2, c==1
我尝试以这种方式完成任务,但解决方案似乎不正确:
std::ostream & operator<<(Stack lstack, const double &value)
{
lstack.push(value);
return lstack;
}
有人能给我一些提示吗?
修改
好吧,所以我不相信我对这种返回类型犯了这么愚蠢的错误。然而,经过一些修改后,我的程序无法编译。以下是代码段:
int main()
{
Stack stos;
std::cout << "***STACK***" << std::endl;
stos.push(2); stos.push(5); stos.push(3);
stos << 7;
...
}
//Stack.h
#pragma once
#include <iostream>
class Stack
{
public:
Stack();
Stack(const Stack &);
~Stack();
struct Element;
virtual void push(double);
virtual double pop();
virtual int empty();
int sizeIt();
int sizeRec();
int countRec(Element*);
Stack& operator=(const Stack&);
Stack& operator<<(Stack&, const double);
protected:
struct Element
{
double value;
Element *prev;
};
Element *top;
};
//stack.cpp
Stack& operator<<(Stack& lstack, const double value)
{
lstack.push(value);
return lstack;
}
void Stack::push(double e)
{
Element *newElem = new Element;
newElem->value = e;
newElem->prev = top;
top = newElem;
}
现在,在头文件中,我的错误是E0344:“此运算符函数的参数太多”和主C2679:'找不到运算符,它采用“int”类型的右侧操作数。
答案 0 :(得分:3)
两个问题:
Stack
的副本,破坏了嵌套ostream&
,好像它是Stack
一样,打破了编译(好吧,也许;您认为我们不值得看到它的定义)我猜您打算写下以下内容:
Stack& operator<<(Stack& lstack, const double value)
{
lstack.push(value);
return lstack;
}