Определение двух классов внутри класса и доступа к его членам

Я пытаюсь получить доступ к элементам класса C из класса B, а classC и classB находятся внутри класса A. Вот что я пытаюсь сделать;

//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() <
<p> Я знаю, что делаю это неправильно, я должен создавать экземпляры каждого класса и вызывать участников?</p>
2 ответа

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

Во-первых, ваши 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);
}


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

return hello::letters::name = n;

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

return hello::letters::name;

licensed under cc by-sa 3.0 with attribution.