1. ホーム
  2. c++

[解決済み] 非静的データメンバの無効な使用

2022-01-24 02:43:51

質問

このようなコードの場合

class foo {
  protected:
    int a;
  public:
    class bar {
      public:
        int getA() {return a;}   // ERROR
    };
    foo()
      : a (p->param)
};

こんなエラーが出ます。

 invalid use of non-static data member 'foo::a'

現在、変数 a のコンストラクタで初期化されます。 foo.

を静止画にすると、こうなります。

 error: 'int foo::a' is a static data member; it can only be initialized at its definition

しかし a をコンストラクタで実行します。 では、どのような解決策があるのでしょうか?

解決方法は?

C++では、(例えば)Javaとは異なり、ネストされたクラスのインスタンスは、本質的に、囲んだクラスのどのインスタンスにも属さない。そのため bar::getA の特定のインスタンスを持っているわけではありません。 foo

a

class bar { private: foo * const owner; public: bar(foo & owner) : owner(&owner) { } int getA() {return owner->a;} };