「friendは友元関数を宣言するが、友元関数はクラスのプライベート属性にアクセスできない」という解決策

3750 ワード

「friendは友元関数を宣言しますが、友元関数はクラスのプライベート属性にアクセスできません」の解決
一回のC++作業問題、長い間やって分かって、成功しましたが、VS 2015は依然として赤い線のヒントの間違いがあって、しかしコンパイル、運行に影響しないで、これはVS自身の1つのBUGのようです.解決:友元類方法のまとめ:1.宣言「friend」を含むクラスは、宣言された友元関数を含むクラスの前に事前に宣言する必要があります.Employerクラスでは「Employee&」が使用されるため、参照されたプライベートメンバーにアクセスできません.2.友元として宣言された関数は、クラス内で宣言し、友元関数として宣言されたクラスの後で定義する必要があります.3.もう一つ私が犯した低レベルのエラー--友元関数を宣言するとき、その関数の役割ドメインを追加するのを忘れました.の
ジョブコードは次のとおりです.
 #include < iostream >
 #include < string >
using namespace std;

class Employee;

class Employer
{
public:
    Employer(string a) {
        Name = a;
    };
    void editEmployee(Employee & person, double salary, string post);
private:
    string Name;
};

class Employee {
public:Employee(int a, string b, double c, string d) {
    ID = a;
    Name = b;
    Salary = c;
    Post = d;
}
       friend void Employer::editEmployee(Employee & person, double salary, string post);
       void printInf() {
           cout << "ID:" << ID << "\t" << "Name:" << Name << "\t" << "Salary:" << Salary << "\t" << "Post:" << Post << endl;
       }
protected:
private:
    int ID;
    string Name;
    double Salary;
    string Post;
};

void Employer::editEmployee(Employee & person, double salary, string post) {
    person.Salary = salary;
    person.Post = post;
};

int main()
{
    Employee sb(22, "abc", 1.23, "a");
    cout << "Previous Information :" << endl;
    sb.printInf();
    Employer boss("BidBoss");
    cout << "Updated Information :" << endl;
    boss.editEmployee(sb, 12.3, "b");
    sb.printInf();
    return 0;
}

//       ,      .