当我尝试从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/