This question already has answers here:
Inner Class access to Outer Class members
(5个答案)
5年前关闭。
我是C++的新手,我已经为这个问题寻找了很多答案,但从未得到满意的答案。
假设我有一个名为
现在,
这给出了以下错误:
我的问题是,
我假设编译器是正确的,所以我也想知道是否有办法使它工作。
注意:不幸的是,调用事件时会实例化内部结构的实例(
而且,如果您希望
请注意,相同原则适用于不是成员变量的
还要注意,您可以使用指针而不是引用。实际上,在许多情况下,指针可提供更大的灵活性。
(5个答案)
5年前关闭。
我是C++的新手,我已经为这个问题寻找了很多答案,但从未得到满意的答案。
假设我有一个名为
FSM
的结构。最终,在我的代码中,可以创建FSM
的多个实例。 FSM
的属性之一是int X
,它不是静态的,每个FSM
实例都应具有自己的X
值。现在,
FSM
的属性之一是另一个结构submachine
,它需要像这样读取X
的值:struct FSM
{
public:
int x;
int getX(){return x;}
struct submachine
{
void onentry() {int g = getX();};
};
};
这给出了以下错误:
我的问题是,
submachine
是FSM
的成员,所以它不应该访问FSM
所有属性的本地实例吗?如果不是,那么当我们创建FSM
的实例时,是否会创建其所有成员(即submachine
)的实例?如果是这样,那么为什么我们需要创建onentry()
所需的对象?我假设编译器是正确的,所以我也想知道是否有办法使它工作。
注意:不幸的是,调用事件时会实例化内部结构的实例(
submachine
),因此我只能定义类型,而不能在FSM
中实例化对象。 最佳答案
不。与Java不同,内部类对象没有对外部对象的隐式引用。
submachine
是类型,而不是成员变量。如果需要成员变量,则必须执行以下操作:
struct FSM {
struct submachine {
...
};
submachine sm; // Member variable of type submchine
};
而且,如果您希望
sm
“查看”其父对象,则需要显式传递它:struct FSM {
struct submachine {
FSM &parent; // Reference to parent
submachine(FSM &f) : parent(f) {} // Initialise reference in constructor
};
submachine sm;
FSM() : sm(*this) {} // Pass reference to ourself when initialising sm
};
请注意,相同原则适用于不是成员变量的
submachine
实例。如果希望他们能够访问FSM
实例,则需要将引用传递给一个实例。还要注意,您可以使用指针而不是引用。实际上,在许多情况下,指针可提供更大的灵活性。
关于c++ - 内部类访问外部类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11405069/
10-09 04:10