请教大家一个小小问题

时间:2022-02-05 17:34:44
#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Link
{
public:
string value;
Link* pre;
Link* succ;
Link(const string & str,Link* p=0,Link* s=0)
:value(str),pre(p),succ(s){}

Link* insert(Link* p,Link* n)
{
if(p==0) return n;
if(n==0) return p;
if(p->pre)
p->pre->succ=n;
n->succ=p;
n->pre=p->pre;
p->pre=n;
return n;
}
void show(){cout<<value<<endl;}
friend ostream& operator<<(const Link *,ostream&);
};

ostream& operator<<(const Link *p,ostream& os)
{
os<<p->value;
return os;
}

void main()
{
Link * p=new Link("AAA");
p=new Link("BBB",0,p);
p->succ->pre=p;
p=new Link("CCC",0,p);
p->succ->pre=p;
Link * n=new Link("DDD");
//p->insert(p,n)->show();   可以正常输入
cout<<p->insert(p,n);    //输出的是内存地址;
}


如注释:倒数第二行可以输入DDD,但是重载<<后不能输入插入的DDD,只能输入内存地址,请问我应该如何重载<<才能正确输入LINK中的value值。谢谢大家了。
或者说是不是应该换种方式去设计这个Link。

6 个解决方案

#1


friend ostream& operator<<(const Link *,ostream&); ==>
friend ostream& operator<<(ostream&os, const Link *);
这样试试啊

#2


ostream& operator<<(ostream& os,const Link *p) 这样  你参数顺序不对

#3


引用 1 楼 hnwyllmm 的回复:
friend ostream& operator<<(const Link *,ostream&); ==>
friend ostream& operator<<(ostream&os, const Link *);
这样试试啊


引用 2 楼 SKATE11 的回复:
ostream& operator<<(ostream& os,const Link *p) 这样  你参数顺序不对


貌似重新编译后,还是有问题。error C2593: 'operator <<' is ambiguous
貌似<<存在两义性。

#4


friend ostream& operator<<(ostream&os, const Link &link);

参数改成引用

#5


引用 3 楼 kongyung 的回复:
Quote: 引用 1 楼 hnwyllmm 的回复:

friend ostream& operator<<(const Link *,ostream&); ==>
friend ostream& operator<<(ostream&os, const Link *);
这样试试啊


引用 2 楼 SKATE11 的回复:
ostream& operator<<(ostream& os,const Link *p) 这样  你参数顺序不对


貌似重新编译后,还是有问题。error C2593: 'operator <<' is ambiguous
貌似<<存在两义性。
我改了可以  VC6  

#6


引用 4 楼 hnwyllmm 的回复:
friend ostream& operator<<(ostream&os, const Link &link);

参数改成引用
++
指针重载是不对的。
应该用引用
另外 链表结构实际是两层结构

一层是节点
一层是链表。

C一般不加区分,把节点当作链表用。
C++ 还是 分开比较好。

#1


friend ostream& operator<<(const Link *,ostream&); ==>
friend ostream& operator<<(ostream&os, const Link *);
这样试试啊

#2


ostream& operator<<(ostream& os,const Link *p) 这样  你参数顺序不对

#3


引用 1 楼 hnwyllmm 的回复:
friend ostream& operator<<(const Link *,ostream&); ==>
friend ostream& operator<<(ostream&os, const Link *);
这样试试啊


引用 2 楼 SKATE11 的回复:
ostream& operator<<(ostream& os,const Link *p) 这样  你参数顺序不对


貌似重新编译后,还是有问题。error C2593: 'operator <<' is ambiguous
貌似<<存在两义性。

#4


friend ostream& operator<<(ostream&os, const Link &link);

参数改成引用

#5


引用 3 楼 kongyung 的回复:
Quote: 引用 1 楼 hnwyllmm 的回复:

friend ostream& operator<<(const Link *,ostream&); ==>
friend ostream& operator<<(ostream&os, const Link *);
这样试试啊


引用 2 楼 SKATE11 的回复:
ostream& operator<<(ostream& os,const Link *p) 这样  你参数顺序不对


貌似重新编译后,还是有问题。error C2593: 'operator <<' is ambiguous
貌似<<存在两义性。
我改了可以  VC6  

#6


引用 4 楼 hnwyllmm 的回复:
friend ostream& operator<<(ostream&os, const Link &link);

参数改成引用
++
指针重载是不对的。
应该用引用
另外 链表结构实际是两层结构

一层是节点
一层是链表。

C一般不加区分,把节点当作链表用。
C++ 还是 分开比较好。