我正在完成一项分配,其中我必须重载插入运算符以获取 Node 对象。我在类定义之外、node.h 文件内创建了运算符重载函数。一切都编译得很好,但是没有调用重载运算符,而是我得到了简单的对象地址。
我被禁止修改调用代码,因此任何更改都必须针对运算符重载。
我现在的代码:
/** OPERATOR << ***********************************/
template<class T>
inline std::ostream & operator << (std::ostream & out, const Node <T> *& pHead)
{
out << "INCOMPLETE";
return out;
}
现在,我只想确保调用重载运算符。一旦我知道我正在调用正确的运算符,我将修复输出代码。
调用代码:
// create
Node <char> * n = NULL;
// code modifying n
// display
cout << "\t{ " << n << " }\n";
注意参数pHead
的类型是对非常量的引用,const Node<T>*
是一个指向 const 的非常量指针,参数n
的类型是Node<T>*
(即指向非常量的非常量指针)。他们的类型不匹配,Node<T>*
需要转换为const Node<T>*
,它是临时的,不能绑定到对非常量的引用。
简而言之,您不能将对非常量的引用绑定到不同类型的对象。
但是对 const 的引用可以绑定到临时的,因此您可以将参数类型更改为对 const 的引用:
template<class T>
inline std::ostream & operator << (std::ostream & out, const Node <T> * const & pHead)
// ~~~~~
或者将其更改为按值传递,Node<T>*
将被隐式转换为const Node<T>*
作为参数传递时。 (通过引用传递指针到 const 没有多大意义。)
template<class T>
inline std::ostream & operator << (std::ostream & out, const Node <T> * pHead)
最后超载了operator<<
指针类型看起来很奇怪。用户定义类型的最常见形式是:
template<class T>
std::ostream & operator << (std::ostream & out, const Node <T> & pHead)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)