【问题标题】:The variable is inaccessible变量不可访问
【发布时间】:2013-12-14 20:53:22
【问题描述】:

在我声明了这个类之后:

class Person
{
 private:
  int age;
 public:
  void setAge(int age);
  int getAge();
}

在 .h 文件中,我实现了 set 和 get 方法:

void Person::setAge(int age)
{
  this->age = age;
}
int Person::getAge()
{
  return age;
}

在 .cpp 文件中

在从另一个继承自“Person”类的“Employee”类预订对象后​​,我正在尝试从 main.cpp 文件访问 age 变量

Employee emp;
cin >> emp.age;

但我收到此错误:

成员 Person::age 无法访问

【问题讨论】:

  • 这就是私人会员的意义所在。顺便说一句,它也可以像这样公开。让用户随时将年龄设置为他们想要的任何值(包括负数)真的有意义吗?年龄无法做到这一点。
  • 还不如改成unsigned char而不是int...
  • @Mehrdad:好的,但这不会给你带来任何好处。
  • @NiklasB.:知道它不能为负数或太大,这让您感到舒适。从长远来看,更少的无效状态 == 更少的潜在错误。
  • @Mehrdad:使用无符号类型对我产生的错误比他们防止的要多,但这可能只是我自己

标签: c++


【解决方案1】:

你有一个读取当前age的访问器和一个写入当前年龄的mutator。要使用你的类,你需要读入一个临时变量,然后使用你的 mutator 来改变它。

Employee emp;

int employee_age; // temporary variable to read in age...
cin >> employee_age;

// using the mutator to set age
emp.setAge(employee_age);

【讨论】:

  • 在“>>”运算符上仍然给我这个错误:没有运算符匹配这些操作数!
  • 您是否包含<iostream>
【解决方案2】:

使用 getter 和 setter 来访问年龄。由于 age 是一个私有变量,并且私有变量不是继承的,所以你不能从员工类中访问 age 变量。

【讨论】:

    【解决方案3】:

    您需要使用 getter 和 setter 方法,而不是尝试直接访问该字段。

    emp.getAge() //will give you the current age.  
    emp.setAge(25) //will set the age to 25.
    

    你的例子是:

    cin >> emp.getAge()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 2019-10-27
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多