2012-03-21 48 views
0

我試圖從classB訪問classC的成員,classC和classB都在classA內。這是我想要做的;在類中定義兩個類並訪問其成員

  //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;