Функция моего друга не выполняется

0

Я объявил функцию друга в моем файле заголовка и определил его в моем.cpp файле, но когда я компилирую, мне говорят, что переменные "не были объявлены в этой области". Я понимаю, что когда функция помечена как знакомая класса, эта функция может напрямую обращаться ко всем членам этого класса, так почему бы мне получить эту ошибку?

Мой файл.h:

#ifndef EMPLOYEE_H
#define EMPLOYEE_H

#include<string>
using namespace std;

class Employee
{
  friend void SetSalary(Employee& emp2);

 private:

  string name;
  const long officeNo;
  const long empID;
  int deptNo;
  char empPosition;
  int yearOfExp;
  float salary;
  static int totalEmps;
  static int nextEmpID;
  static int nextOfficeNo;

 public:
  Employee();
  ~Employee();
  Employee(string theName, int theDeptNo, char theEmpPosition, int theYearofExp);
  void Print() const;
  void GetInfo();
};

#endif

функция в файле my.cpp

void SetSalary(Employee& emp2)
{

  while (empPosition == 'E')
    {
      if (yearOfExp < 2)
        salary = 50000;
      else
        salary = 55000;
    }
}

Примечание. В моем Main.cpp я создаю объект 'emp2'. Это передается в качестве параметра в функцию.

Теги:
friend-function

1 ответ

4

empPosition, yearOfExp и salary являются членами класса Employee, поэтому вам нужно

while (emp2.empPosition == 'E') ....
//     ^^^^

и аналогичным образом для выражений с участием yearOfExp и salary. функции friend функции, не являющиеся членами, поэтому они могут обращаться к членам данных класса, к которому они дружат, через экземпляр этого класса (emp2 в этом случае).

  • 0
    Ух ты ... после того, как я перебрал заголовок и .cpp, я ни разу об этом не подумал. Я должен был заметить это прошлой ночью.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню