2013-12-14 8 views
0

После того как я объявил этот класс:Переменная недоступна

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

в .h файле, и я осуществлять набор и получить метод:

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

в файле .cpp

Я пытаюсь получить доступ к переменной возраста из файла main.cpp после заказа объекта из другого класса «Сотрудник», который унаследовал от класса «Лицо»

Employee emp; 
cin >> emp.age; 

, но я получаю эту ошибку:

member Person::age is inaccessible

+3

Это точка частных членов. С другой стороны, это может быть так же публично. Действительно ли имеет смысл позволить пользователю установить возраст в любое время (включая отрицательное число) в любое время? Возраст не может этого сделать. – chris

+0

Мог бы также сделать это 'unsigned char' вместо' int' ... – Mehrdad

+0

@Mehrdad: Хорошо, но это ничего не купит. –

ответ

0

Вы аксессор для чтения тока age и мутатор для писать текущий возраст. Чтобы использовать ваш класс, вам нужно будет прочитать временную переменную, а затем использовать свой мутатор , чтобы изменить его.

Employee emp; 

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

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

все еще он дает мне эту ошибку на «>>»: оператор не соответствует этим операндам! –

+0

Включили ли вы ''? – Chad

1

Используйте методы получения и установки для доступа к возрасту. Поскольку возраст является частной переменной, а частные переменные не наследуются, поэтому вы не можете получить доступ к возрастной переменной из класса employee.

+0

Показать пример кода, как это сделать. –

0

Вам необходимо использовать методы getter и setter вместо того, чтобы пытаться напрямую обращаться к полю.

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

Ваш пример будет:

cin >> emp.getAge() 
Смежные вопросы