c++ - 从 C++ header 中定义的友元函数调用函数

标签 c++ friend-function

我已将 >>> 运算符重新定义为 header 中模板类中的友元函数。在其中,我需要调用另一个名为 inputHelper 的函数,我也在 header 中定义了该函数。 (输入助手是递归的)

头文件如下:

template< typename NODETYPE > class Forest
{
    /* (other friends) */
    friend void inputHelper(istream& file, int previousDepth,
        ForestNode<NODETYPE>& previousNode, ForestNode<NODETYPE> *nodeArray,
        int nodeCount)
    {
        /* (dostuff) */
        if(someconditional)
        {
            /* call inputHelper */
        }
    }

    friend istream& operator>>(istream& file, Forest<NODETYPE>& f1)
    {
        /* (dostuff) */
        /* (call inputHelper) */
    }
public:
    /* ... */
private:
    /* ... */
}

但是,在编译时,它显示 |140|error: 'inputHelper' was not declared in this scope|。您是否必须做一些特别的事情,因为它们都在标题中定义为友元函数?我有点理解 inputHelper 超出了类的范围,但我不确定如何解决这个问题。

最佳答案

友元函数不是成员函数。换句话说,它的范围在你的类的范围之外。通过声明它为友元,你赋予它特殊的权限来访问 Forest 类的 protected 成员,但是你必须访问成员方法的方式应该使用该对象。 MememberMethod() 语法。

在这种情况下,您需要调用 f1.inputHelper(...),而不是直接调用 inputHelper(..)。如果您像这样调用 inputHelper,我想它应该可以正常编译。

关于c++ - 从 C++ header 中定义的友元函数调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4061208/

相关文章:

c++ - 是否有必要使用 'new' 分配一个新指针,指向一个与先前存在的指向同一结构的指针相同的结构?如果是这样,为什么?

c++ - 初始化列表中的序列点警告

c++ - 好友功能无法识别

c++ - friend 功能无法访问私有(private)成员

c++ - C++中如何将分数转换为 float

c++ - std::map 分配错误

C++ 命名空间....匿名命名空间是合法的吗?

python - 在不损失精度的情况下将 double 从 C++ 传输到 python

c++ - 我们可以声明一个没有参数的友元函数吗?