简要概述: 我有一个基类来构建一些数据对象。然后我有一个子类,它继承了所有公共方法和指向基类中对象的指针。
在那个子类中,我想构造一个在for_each循环中使用的仿函数(作为结构)。我的问题是,在仿函数运算符中,我在尝试访问对象时遇到错误。
缩写示例:
class Child : public BaseClass {
Child(DataSource& in_data): Base(in_data){};
struct foo {
double operator() (int x){
double y = in_data.some_function(x);
// do stuff
}
};
}
错误:无法访问in_data.some_function。
想法?
答案 0 :(得分:6)
Nested classes 没有封闭类成员的可见性(它们与Java中的static
嵌套类相似)。
如果您希望foo
访问in_data
,则需要明确提供参考。因此,在foo
的构造函数中,要么引用DataSource
,要么引用Child
(并传递*this
)。
答案 1 :(得分:1)
您的foo
不了解DataSource
。
考虑这个
struct foo
{
DataSource& ds;
foo(DataSource& a) :ds(a) {}
double operator() (int x)
{
double y = ds.in_data.some_function(x);
.....
}
};
你必须通过给它一个引用的数据来创建foo。