Я объявил функцию друга в моем файле заголовка и определил его в моем.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'. Это передается в качестве параметра в функцию.
empPosition
, yearOfExp
и salary
являются членами класса Employee
, поэтому вам нужно
while (emp2.empPosition == 'E') ....
// ^^^^
и аналогичным образом для выражений с участием yearOfExp
и salary
. функции friend
функции, не являющиеся членами, поэтому они могут обращаться к членам данных класса, к которому они дружат, через экземпляр этого класса (emp2
в этом случае).