2017-12-25 15 views
-1

は今のところ、私はそう入れ子になったクラスを持っている:new()を使ってネストしたクラス内のメソッドを呼び出す方法はありますか?

class Outer{ 

public: 
    class Inner{ 

    public: 
     void display(){ 
      cout << "You are in inner class" << endl; 
     } 
    }; 
    void display(){ 
     cout << "You are in outer class" << endl; 
    } 
}; 

私はので、私は彼らのdisplay()の各メソッドを呼び出すことができ、各クラスOuterInnerのインスタンスを作成する必要があります。私は、私の要件の一部としてそれらを呼び出すためにnewを使用する必要があります。私はInnerクラスに同じことをやってトラブルを抱えている、

Outer *pOuter = new Outer(); 
pOuter->display(); 

しかし、私はそうとその方法にOuterクラスの罰金とポイントを呼び出すことができます。私は試しました:

Outer:Inner *pInner = new Outer:Inner(); 
pInner->display(); 

しかし、それは動作しません。だから私はnewを使用しているときに私は内部のメソッドを呼び出すために何ができるのだろうか?ポインタなし

Outer::Inner* p = new Outer::Inner; 
p->display(); 
delete p; 

+1

'Inner'の完全修飾名は' Outer :: Inner'です。そして、「pOuter:Inner」はばかげている。 – StoryTeller

+0

_これはうまくいきません。 –

+0

用語についてちょっとした点があります。Javaには、C++がサポートしていない特別な意味を持つ外部クラスと内部クラスがあります。タイトルのように、C++の最善の用語は**ネストされたクラスです**。 –

答えて

0

は、完全修飾パスを使用し

Outer::Inner o; 
o.display(); 

や機能staticをマークして呼び出しますよう-で、言われていること

Outer::Inner::display(); 

これは、クラスの代わりに(Outer)名前空間に適しています。

関連する問題