c++ - 模板函数中的运算符 << 重载
问题描述
我不知道这段代码的哪一部分是错误的。错误信息如下。
我想重载<<
运算符,以便我可以编写类似cout << tree
. 我查找了有关模板、友元函数、运算符重载的信息。但我仍然不明白为什么会出现错误。
模板 <类型名值> 类树 { 受保护: 节点<值>* root = NULL; 整数大小 = 0; std::ostream& _ostreamOperatorHelp(Node<Value>* node, int level, std::ostream& os) { ... } 上市: 朋友 std::ostream& operator<< <Value>(std::ostream& os, 树<值> const& 树); }; 模板 <类型名值> std::ostream& 运算符<<(std::ostream& os, Tree<Value> const& tree) { tree._ostreamOperatorHelp(tree.GetRoot(), 0, os); 返回操作系统; }
错误信息:
Tree.hpp:129:34: error: declaration of 'operator<<' as non-function
friend std::ostream& operator<< <Value>(std::ostream& ,
^~
解决方案
在与特定模板特化成为朋友之前,您必须先声明通用模板函数,如下所示:
template <typename Value>
class Tree;
template <typename Value>
std::ostream& operator<<(std::ostream& os, Tree<Value> const& tree);
template <typename Value>
class Tree {
protected:
Node<Value>* root = NULL;
int size = 0;
std::ostream& _ostreamOperatorHelp(Node<Value>* node, int level,
std::ostream& os) {
...
}
public:
friend std::ostream& operator<< <Value>(std::ostream& os,
Tree<Value> const& tree);
};
template <typename Value>
std::ostream& operator<<(std::ostream& os, Tree<Value> const& tree) {
tree._ostreamOperatorHelp(tree.GetRoot(), 0, os);
return os;
}
推荐阅读
- drupal - 我可以为视图设置动态参数吗?
- linux - Pacemaker IPaddr2 资源 - 无法从接口中删除 IP
- ruby-on-rails - 罗尔。宝石法拉第。如何重新发送带有正文的帖子查询
- android - Android:SQL Server以编程方式检查登录详细信息
- python - 如何从包含另一个数组的一维数组制作二维数组?
- authentication - 强制 SAML 的 Azure AD 登录提示
- .net - Docketfile - 单元测试不适用于多个构建目标
- angular - 在 HTML 中注入 Selector 后,如何在 Angular 中纠正 CSS 样式?
- android - Android Studio 中未生成项目的 POM 文件
- javascript - 如何将两个按钮绑定到一个功能?