模板二叉搜索树 ostream 过载问题
Template Binary Search Tree ostream overloading issue
>我试图搜索,但找不到解决方案以及问题的含义是什么。
friend ostream & operator<<(ostream &os, const BST<T> &rhs);
void helperFunc(ostream & os, Node<T> *root) const;
定义是:
template<class T>
ostream & operator<<(ostream & os, const BST<T> &rhs)
{
rhs.helperFunc(os, rhs._root);
os << endl;
return os;
}
template<class T>
void BST<T>::helperFunc(ostream & os, Node<T> *root) const
{
if (root != NULL)
{
helperFunc(os, root->left);
os << root->value << " ";
helperFunc(os, root->right);
}
}
我主要使用:
void main()
{
BST <int> a;
a.insert(5)
cout << a;
}
我收到以下错误消息:
Error LNK2019 unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class BST<int> const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABV?$BST@H@@@Z) referenced in function _main...
如果需要,将提供任何其他信息。
解决方案是:
template <typename U>
friend ostream & operator<<(ostream & os, const BST<U> &obj);
重
载运算符<<和运算符>>有点特殊。只需评论此声明,它将起作用:
friend ostream & operator<<(ostream &os, const BST<T> &rhs);
这是因为友元函数实际上不是类的成员函数。在类外部定义的重载运算符<<函数实际上定义了一个新的模板函数,与类中声明的函数不同。虽然它们具有相同的"模板类T",但它们确实是不同的功能。因此,编译错误告诉您未定义类的运算符<<函数。
由于我们在类外重载了一个新的模板运算符<<我们可以摆脱在类中声明的 friend 函数。以下代码将起作用,我更改了一些其他功能以进行很好的解释:
#include <iostream>
using namespace std;
template<class T>
class Node {
};
template<class T>
class BST {
public:
// friend ostream & operator<<(ostream & os, const BST<int> &rhs);
void helperFunc(ostream & os, Node<T> *root) const;
};
template<class T>
ostream & operator<<(ostream & os, const BST<T> &rhs)
{
cout << "success" << endl;
// rhs.helperFunc(os, rhs._root);
// os << endl;
return os;
}
template<class T>
void BST<T>::helperFunc(ostream & os, Node<T> *root) const
{
if (root != NULL)
{
helperFunc(os, root->left);
os << root->value << " ";
helperFunc(os, root->right);
}
}
int main()
{
BST<int> a;
// a.insert(5);
cout << a;
}
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么C++在自定义结构向量时会出现 ostream 重载问题?
- 动态数组模板类:ostream&运算符友元函数的问题
- 模板二叉搜索树 ostream 过载问题
- C++ ostream <<过载问题
- 关于临时ostream对象的c++问题
- ostream/ofstream继承问题
- 下面的代码有什么问题?它在不使用sprintf或ostream的情况下将double转换为string
- 继承 ostream 和 xsputn 和 Overflow 的 Streambuf 问题