我有这个代码,我无法计算重载<<操作者:
ostream& operator<<(ostream& out)
{int check=0;
node *temp;
temp=this->head->next;
if(this->head->info==0)
out<<"- ";
while(temp!=NULL)
{ if(temp->info)
{out<<temp->info<<" ";
check=1;
temp=temp->next;}
else if(temp->info==0&&check==1)
{out<<temp->info<<" ";
temp=temp->next;}
else temp=temp->next;
}
return out;
}
我在课堂上有一个结构,希望输出一个大数字。使用链表创建大号。重载方法在类中,我得到错误:运算符不匹配&lt;&lt;当我使用
cout<< B;
在主内部。
有关上述代码的更多详细信息。 check变量是为了确保打印100这样的数字为100.如果head-&gt; info == 0 number为负数,如果它为1,则数字为正数。我从头开始 - >接下来因为第一个节点有数字符号。
答案 0 :(得分:2)
你是以错误的方式做的...在类中重载操作符允许你使用类作为操作符的左操作数...所以基本上你现在可以做B << cout;
。
您需要将运算符重载为定义类的命名空间中的函数:
ostream& operator<<(ostream& out, TYPE_OF_YOUR_CLASS_HERE v)
{
int check=0;
node *temp;
temp=b.head->next;
if(v.head->info==0)
out<<"- ";
while(temp!=NULL)
{
if(v.info) {
out<<v.info<<" ";
check=1;
temp=temp->next;
} else if(temp->info==0&&check==1) {
out<<temp->info<<" ";
temp=temp->next;
}
else
temp=temp->next;
}
return out;
}
正如Alper建议您还需要使运算符&lt;&lt;你班上的朋友能够访问班级的私人领域:
class MY_CLASS {
...
friend ostream& operator<< (ostream& out, MY_CLASS v);
};
答案 1 :(得分:2)
如果要允许类型恰好位于二元运算符右侧的表达式,则首选全局operator<<
重载。
std::ostream& operator<<(std::ostream& os, const YourClassType& B)
此外,如果需要访问私有成员,请将其设为friend
。否则只需将其作为非朋友非会员功能。
答案 2 :(得分:1)
operator<<
重载不能是成员函数 - 你必须将它称为B << cout
,这远非不错。
(对于所有二元运算符,B.operator<<(cout)
表示B
是左侧。)
这是我通常做的事情。
一个命名的常规成员函数:
ostream& output(ostream& out) const
{
// Your code here.
}
和一个只调用它的运算符:
ostream& operator<<(ostream& os, const MyClass& c)
{
return c.output(os);
}