2012-03-21 7 views
0

classCからclassBのメンバーにアクセスしようとしていますが、classCとclassBはclassAの中にあります。ここに私がやろうとしていることがあります。クラス内で2つのクラスを定義し、そのメンバーにアクセス

  //hello.h 
      class hello{ 
       public: 
        hello(); 
        class letters{ 
         public: 
         letters(); 
         void setName(char n); 
         char getName(); 
         private: 
         char name; 
        } 
        class sayHi{ 
         public: 
          sayHi(); 
          void onJoin(); 
        } 
      } 

      //hello.cpp 

      hello::hello(){} 
      hello::letters(){} 
      hello::sayHi(){} 

      void hello::letters::setName(char n){ 
      hello::letters::name = n; //trying to access the private variable 'name' inside class letters 
      } 

      char hello::letters::getName(){ 
      return hello::letters::name = n; 
      } 

      void hello::sayHi::onJoin(){ 
      cout<< hello::letters::getName() <<endl; 
      } 

私は、私は、各クラスのインスタンスを作成し、メンバーを呼び出すことになっています、私はそれが間違ってやっている知っていますか?

答えて

2

する必要がありますはい、あなたはクラスのインスタンスを作成することになっています。
これらは「オブジェクト」と呼ばれることが多く、「オブジェクト指向プログラミング」と呼ばれています。

まず、あなたのgetNamesetNameは次のようになります。邪魔にそれと

void hello::letters::setName(char n) { 
    name = n; 
} 

char hello::letters::getName() const { // Declaration should also say "const". 
    return name; 
} 

、任意のsayHiインスタンスは、あなたがする必要があることを意味している、に「こんにちは」と言っているletters知っている必要がありますそれを伝えます。あなたは多少のように使用することになり

class sayHi{ 
public: 
    sayHi(); 
    void onJoin(const letters& who) 
    { 
     cout << who.getName() << endl; 
    } 
}; 


は、これは通常、知っている必要があるメソッドにパラメータを渡すことによって行われ

int main() 
{ 
    hello::letters letter; 
    letter.setName('p'); 
    hello::sayHi greeter; 
    greeter.onJoin(letter); 
} 
0

エラーは何ですか?これらのメソッドにアクセスするためのオブジェクトはどこに作成しましたか?また

return hello::letters::name = n; 

この行が間違っている、それは

return hello::letters::name; 
関連する問題