我对 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();};
};
};
这给出了以下错误:
错误:“FSM::getX”:非法调用非静态成员函数
我的问题是,submachine
是 的成员FSM
,所以它不应该有权访问 的所有属性的本地实例FSM
吗?如果不是,当我们创建 的实例时FSM
,我们不会创建其所有成员的实例,即 iesubmachine
吗?如果是这样,那我们为什么需要创建一个需要的对象onentry()
呢?
我假设编译器是正确的,所以我也想知道是否有办法让它工作。
注意:不幸的是,内部结构 ( submachine
) 的实例在调用事件时被实例化,因此我只能定义类型,而不能在FSM
.