我正在尝试重载运算符<<在C ++中使用递归私有方法将二进制搜索树的内容作为字符串获取。尽管检查方法签名是否存在不一致,我仍然会收到“未在此范围内声明”错误。我不明白为什么在运算符<<中调用recursiveOutput()的原因导致此错误。
运营商LT;<定义:
friend std::ostream& operator<<(std::ostream&, const BinTree&);
递归方法定义:
void recursiveOutput(Node*, string&);
运营商LT;&LT;实现:
std::ostream& operator<<(std::ostream& os, const BinTree& rhs)
{
string result;
recursiveOutput(rhs.root, result);
os << result;
return os;
}
BinTree类具有私有成员“root”,它是指向结构“Node”的指针。
编辑:示例代码
class BinTree
{
public:
friend std::ostream& operator<<(std::ostream&, const BinTree&);
private:
struct Node
{
string data;
Node* left;
Node* right;
};
Node* root;
void recursiveOutput(Node*, string&);
};
std::ostream& operator<<(std::ostream& os, const BinTree& rhs)
{
string result;
rhs.recursiveOutput(rhs.root, result);
os << result;
return os;
}
void BinTree::recursiveOutput(Node* currentRoot, string& result)
{
// if currentRoot is NULL return
if (currentRoot == NULL)
{
return;
}
// traverse left branch
recursiveOutput(currentRoot->left, result);
// append string from NodeData
std::ostringstream stream;
stream << *currentRoot->data;
result.append(stream.str());
result.append(" ");
// traverse right branch
recursiveOutput(currentRoot->right, result);
}
编辑:这导致错误的原因是因为运营商&lt;&lt;不是BinTree的成员,因此它不能在没有BinTree对象的情况下调用成员函数来调用它。