编译器不使用运算符<<
Compiler doesn't use operator<<
我在将我的链接列表放入 << 运算符时遇到了一点问题。这是代码:
ostream& operator<<(ostream& o,const Node& f)
{
Node *p = new Node(f.val);
p->next = f.next;
p->prev = f.prev;
o << "[";
while(p->next->val != -1)
{
p = p->next;
o << p->val << " ";
}
o << "]" << endl;
delete p;
return o;
}
所以当我在 main() 中使用它时,它看起来像这样:
BiQueue bq();
bq.Push(5);
...
cout << bq.getFirst();
但是经过测试,运算符就是不运行,输出的是一个内存地址。
所以我直接这样测试了:
cout << first;
(first 是一个 Node*) 并且它输出一个内存地址,所以操作符还没有被使用。
the operator just doesn't run, the output is a memory address.
而不是这个:
Node *first = ...;
cout << first;
你需要这个:
Node &first = ...;
cout << first;
否则您将传递指向 operator<<
的指针。
您告诉编译器如何打印 Node
,但您正在打印 Node *
。这些是不同的类型。要获得您想要的行为,请尝试 cout << *first;
和 cout << *bq.getFirst();
.
我在将我的链接列表放入 << 运算符时遇到了一点问题。这是代码:
ostream& operator<<(ostream& o,const Node& f)
{
Node *p = new Node(f.val);
p->next = f.next;
p->prev = f.prev;
o << "[";
while(p->next->val != -1)
{
p = p->next;
o << p->val << " ";
}
o << "]" << endl;
delete p;
return o;
}
所以当我在 main() 中使用它时,它看起来像这样:
BiQueue bq();
bq.Push(5);
...
cout << bq.getFirst();
但是经过测试,运算符就是不运行,输出的是一个内存地址。
所以我直接这样测试了:
cout << first;
(first 是一个 Node*) 并且它输出一个内存地址,所以操作符还没有被使用。
the operator just doesn't run, the output is a memory address.
而不是这个:
Node *first = ...;
cout << first;
你需要这个:
Node &first = ...;
cout << first;
否则您将传递指向 operator<<
的指针。
您告诉编译器如何打印 Node
,但您正在打印 Node *
。这些是不同的类型。要获得您想要的行为,请尝试 cout << *first;
和 cout << *bq.getFirst();
.