当我尝试从GHistogram实现中访问extractHistogram()类的bin私有(private)成员时,出现以下错误:

error: 'QVector<double> MyNamespace::GHistogram::bins' is private
error: within this context

“在此上下文中”错误指向extractHistogram()实现的地方。有人知道我的 friend 函数声明有什么问题吗?

这是代码:
namespace MyNamespace{

class GHistogram
{

public:
    GHistogram(qint32 numberOfBins);
    qint32 getNumberOfBins();

    /**
     * Returns the frequency of the value i.
     */
    double getValueAt(qint32 i);
    friend GHistogram * MyNamespace::extractHistogram(GImage *image,
                                                      qint32 numberOfBins);

private:
    QVector<double> bins;
};

GHistogram * extractHistogram(GImage * image,
                              qint32 numberOfBins);

} // End of MyNamespace

最佳答案

根据我的GCC,上面的代码无法编译,因为extractHistogram()的声明出现在friend所在的类定义之后。编译器因friend语句而感到窒息,说extractHistogram既不是函数也不是数据成员。一切正常,当我将声明移到类定义之前(并且添加前向声明bins以便编译器知道返回类型)时,可以访问class GHistogram;。当然,extractHistogram()的代码应该写在 namespace 中,方法是通过

namesapce MyNameSpace {
// write the function here
}

或者
GHistogram *MyNameSpace::extractHistogram( //....

关于c++ - 为什么这个 friend 功能不能访问类(class)的私有(private)成员?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2500670/

10-11 19:10