c++ - 内部类访问外部类

标签 c++ structure

我对 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();};
    };
};

这会产生以下错误:

Error: 'FSM::getX' : illegal call of non-static member function

我的问题是,submachineFSM 的成员,所以它不应该可以访问 FSM 的所有属性的本地实例吗>?如果不是,当我们创建 FSM 的实例时,我们不会创建其所有成员的实例,即 submachine 吗?如果是这样,那为什么我们需要创建 onentry() 需要的对象?

我假设编译器是正确的,所以我也想知道是否有办法让它工作。

注意:不幸的是,内部结构的实例(submachine)在调用事件时被实例化,因此我只能定义类型,而不能在 FSM 中为它们实例化对象.

最佳答案

my question is, submachine is a member of FSM, so it should have access to local instances of all the attributes of FSM, no?

没有。与 Java 不同,内部类对象没有对外部对象的隐式引用。

wouldn't we be creating an intance of all its members i.e. submachine?

submachinetype,而不是成员变量。如果你想要一个成员变量,你必须这样做:

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 实例,则需要传递对实例的引用。

还请注意,您可以使用指针而不是引用。事实上,指针在许多情况下提供了更大的灵 active 。

关于c++ - 内部类访问外部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11405069/

相关文章:

c++ - gsl assert 与 c++ 中的 assert 的优势?

c-尝试添加到 Struct 中的 char 数组时出现段错误

c - 选择排序与链表的

c - 如何使用指针将值输入到结构中?

C++ 一个文件多个类

c++ - 使用友元类访问私有(private)数据成员

c++ - Visual Studio 给出了关于模棱两可的 ctor 的错误

c++ - C 或 C++ 中好的 goto 示例

php - 保存到一张表还是创建多个表?

c - 将结构体指针从一个函数传递到另一个函数