为什么在访问同一个类的私有成员时出现编译错误

时间:2013-12-17 08:38:02

标签: c++

为什么这个程序会出现编译错误:

proxy.cpp:在成员函数'void ProxyCar :: MoveCar()'中: proxy.cpp:59:错误:'int Driver :: age'是私有的 proxy.cpp:81:错误:在此上下文中

class Car
{
    public:
        void MoveCar()
        {
                cout << "Car has been driven";
        }
};

class Driver
{
    private:
         int age;

    public:

        int get() { return age; }
        void set(int value) { age = value; }
        Driver(int age):age(age){}
};

class ProxyCar
{
    private:
        Driver driver;
        Car *realCar;

    public:
    ProxyCar(Driver driver): driver(driver), realCar (new Car) {}

    void MoveCar()
    {
        if (driver.age <= 16)
          cout << "Sorry the driver is too young to drive";
        else
            realCar->MoveCar();
    }
};

int main()
{
        Driver d(16);
        ProxyCar p(d);
        p.MoveCar();
        return 0;
}

我正在尝试访问ProxyCar中的Driver对象。此行导致错误。  if(driver.age&lt; = 16)

3 个答案:

答案 0 :(得分:4)

因为ageDriver类中的私有成员。

你打算这样做:

     if (driver.get()<= 16)
         cout << "Sorry the driver is too young to drive";
     else
         realCar->MoveCar();

答案 1 :(得分:3)

Driver::ageprivate的{​​{1}}成员。因此,只有class Driver

的成员才能访问它

但是,您可以使用访问者方法让外部世界访问class Driver成员。

private

使用访问器方法获取类的class Driver { private: int age; public: int get_age() { return age; } }; 成员。

private

有关访问修饰符的更多信息:http://en.wikipedia.org/wiki/Access_modifiers

答案 2 :(得分:0)

您正在访问Driver的私人成员。这是一个单独的类,您对其私有成员没有可见性。