#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 *);
这样试试啊
friend ostream& operator<<(ostream&os, const Link *);
这样试试啊
#2
ostream& operator<<(ostream& os,const Link *p) 这样 你参数顺序不对
#3
貌似重新编译后,还是有问题。error C2593: 'operator <<' is ambiguous
貌似<<存在两义性。
#4
friend ostream& operator<<(ostream&os, const Link &link);
参数改成引用
参数改成引用
#5
我改了可以 VC6
#6
friend ostream& operator<<(ostream&os, const Link &link);
参数改成引用
指针重载是不对的。
应该用引用
另外 链表结构实际是两层结构
一层是节点
一层是链表。
C一般不加区分,把节点当作链表用。
C++ 还是 分开比较好。
#1
friend ostream& operator<<(const Link *,ostream&); ==>
friend ostream& operator<<(ostream&os, const Link *);
这样试试啊
friend ostream& operator<<(ostream&os, const Link *);
这样试试啊
#2
ostream& operator<<(ostream& os,const Link *p) 这样 你参数顺序不对
#3
friend ostream& operator<<(const Link *,ostream&); ==>
friend ostream& operator<<(ostream&os, const Link *);
这样试试啊
ostream& operator<<(ostream& os,const Link *p) 这样 你参数顺序不对
貌似重新编译后,还是有问题。error C2593: 'operator <<' is ambiguous
貌似<<存在两义性。
#4
friend ostream& operator<<(ostream&os, const Link &link);
参数改成引用
参数改成引用
#5
friend ostream& operator<<(const Link *,ostream&); ==>
friend ostream& operator<<(ostream&os, const Link *);
这样试试啊 ostream& operator<<(ostream& os,const Link *p) 这样 你参数顺序不对
貌似重新编译后,还是有问题。error C2593: 'operator <<' is ambiguous
貌似<<存在两义性。
#6
friend ostream& operator<<(ostream&os, const Link &link);
参数改成引用
指针重载是不对的。
应该用引用
另外 链表结构实际是两层结构
一层是节点
一层是链表。
C一般不加区分,把节点当作链表用。
C++ 还是 分开比较好。