在此范围内未声明<method>

时间:2016-10-14 18:11:57

标签: c++ operator-keyword signature

我正在尝试重载运算符&lt;&lt;在C ++中使用递归私有方法将二进制搜索树的内容作为字符串获取。尽管检查方法签名是否存在不一致,我仍然会收到“未在此范围内声明”错误。我不明白为什么在运算符&lt;&lt;中调用recursiveOutput()的原因导致此错误。

运营商LT;&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对象的情况下调用成员函数来调用它。

0 个答案:

没有答案