Определение двух классов внутри класса и доступ к его членам - PullRequest
0 голосов
/ 21 марта 2012

Я пытаюсь получить доступ к членам classC из classB, и 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 ]

2 голосов
/ 21 марта 2012

Да, вы должны создавать экземпляры классов.
Их часто называют "объектами", поэтому они называют его "объектно-ориентированным программированием".

Во-первых, ваш getName и setName должны выглядеть следующим образом:

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 голосов
/ 21 марта 2012

Какую ошибку вы получаете?где вы создали объекты для доступа к этим методам?Также

return hello::letters::name = n; 

эта строка неверна, она должна быть

return hello::letters::name; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...