c++ - 模板化运算符重载中的成员函数不起作用
问题描述
我的 printTree 函数在重载的 ostream 运算符中不起作用。错误和代码如下。
错误代码:C3861('printTree':未找到标识符)
描述:'printTree':函数未在模板定义上下文中声明,只能通过实例化上下文中的参数相关查找找到
类声明
#pragma once
#include "BSTNode.h"
#include <iostream>
template <typename T> class BST;
template <typename T>
std::ostream& operator<<(std::ostream& out, const BST<T>& rhs);
template <typename ItemType>
class BST
{
private:
BSTNode<ItemType>* root;
BSTNode<ItemType>* insert(ItemType* &data, BSTNode<ItemType>* root);
BSTNode<ItemType>* remove(const ItemType &x, BSTNode<ItemType>* root);
BSTNode<ItemType>* findMin(BSTNode<ItemType>* root) const;
BSTNode<ItemType>* findMax(BSTNode<ItemType>* root) const;
bool search(const ItemType &data, BSTNode<ItemType>* root) const;
void destroyTree(BSTNode<ItemType>* root); //for destructor
BSTNode<ItemType>* clone(BSTNode<ItemType>* root) const;
void printTree(std::ostream& out, BSTNode<ItemType>* root) const;
public:
BST();
~BST();
BST(const BST &rhs);
BSTNode<ItemType>* getRoot() const {return root;}
bool isEmpty();
void insert(ItemType* &data);
bool remove(const ItemType &x);
ItemType findMin() const;
ItemType findMax() const;
bool search(const ItemType &data) const;
friend std::ostream& operator<< <>(std::ostream & out ,const BST<ItemType> &rhs);
void printTree (std::ostream &out = std::cout) const;
};
相关方法
template <typename ItemType>
void BST<ItemType>::printTree(std::ostream& out, BSTNode<ItemType>* root) const
{
if (root != nullptr)
{
printTree(out, root->getLeft());
out << *(root->getData()) << std::endl;
printTree(out, root->getRight());
}
}
template <typename ItemType>
std::ostream& operator << <>(std::ostream & out , const BST<ItemType> &rhs)
{
printTree(out, rhs.getRoot());
return out;
}
解决了:
需要在运算符重载定义中将调用对象添加到 printTree 函数
template <typename ItemType>
std::ostream& operator << <>(std::ostream & out , const BST<ItemType> &rhs)
{
rhs.printTree(out, rhs.getRoot());
return out;
}
解决方案
std::ostream& operator<<(std::ostream& out, const BST<T>& rhs);
friend std::ostream& operator<< <>(std::ostream & out ,const BST<ItemType> &rhs);
有 <> 作为区别,所以我不确定这是否是您的错误。方法一样。
推荐阅读
- python - 由于先例标签,scrapy 得到了一个标签
- mongodb - 用 mgo 省略多个字段
- function - 我的双重功能没有给我返回结果
- javascript - React.lazy 错误 Object(...) is not a function
- mysql - 如何使用过程更改列的默认值
- java - Java 从泛型方法调用非泛型方法
- javascript - discordjs setInterval 不更新 json 文件
- django - 将来安排(可取消的)django任务
- html - Bootstrap 4删除/忽略父填充
- c - C - 使用 pthread 共享双重导致段错误