在类中定义两个类,并访问其成员

时间:2012-03-21 02:06:47

标签: c++ class object

我正在尝试从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 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

你得到的错误是什么?你在哪里创建了访问这些方法的对象?还

return hello::letters::name = n; 

这一行是错的,应该是

return hello::letters::name;