2

私はこれをやろうとしていました、

class Outer {
public:
    struct inner_t {
        void foo()
        {
            printf("%d", _x);
        }
    };
    int _x;
};

int main()
{
    Outer o;
    o._x = 10;
}

上記はエラーでコンパイルできません:

エラー:非静的データメンバーの無効な使用'Outer :: _ x'</ p>

しかし、この投稿によると、inner_t実際にアクセスできますOuter::_x、何が問題なのですか?

4

2 に答える 2

6

問題は次のとおりです。読み取りinner_t元のインスタンスがわからない。Outer_x

あなたが書いた場合(例えば):

void foo(const Outer *o)
{
    printf("%d", o->_x);
}

または_x、の静的メンバーだった場合Outer。その後、動作するはずです(少なくともエラーは発生しません)。

于 2012-10-04T09:53:09.530 に答える
2

あなたは確か_xにタイプのオブジェクトにアクセスすることができますOuter。基本的に、静的な方法でインスタンスフィールドにアクセスしようとします。のインスタンスを渡し、Outerそれを使用します。

于 2012-10-04T09:53:54.363 に答える