为什么显示错误"not declared in this scope"?

Why is the error "not declared in this scope" shows?

我是 C++ 的初学者。我正在学习主题朋友功能。我有下面的代码,其中两个友元函数在 class 中声明并由构造函数调用,但错误显示声明的友元成员函数未在范围内声明。我在这里做错了什么?这是我的代码:

#include <iostream.h>

class Salary
{
private:
     int sal[10];

public:
     friend void add_details();
     void display();
     friend void display_des();

     Salary()
     {
          add_details();
     }
};

void add_details()
{
     int loop = 0;

     for(loop=0;loop<10;loop++)
     {
          cin >> sal[loop];
          if (sal[loop] <= 0)
          {
                cout << "The amount should be greater than 0" << endl;
                loop = loop - 1;
                continue;
          }
     }
}

void display_des()
{
     int sal_des[10];
     int loop1 = 0, loop2;

     for(loop1=0; loop1<10; loop1++)
     {
          sal_des[loop1] = sal[loop1];
     }

     for (loop1=0; loop1<10; loop1++)
     {
          for(loop2=loop1+1; loop2<10; loop2++)
          {
                if (sal_des[loop1]< sal_des[loop2])
                {
                     int temp;
                     temp = sal_des[loop1];
                     sal_des[loop1] = sal_des[loop2];
                     sal_des[loop2] = temp;
                }
          }
     }

     for(loop1=0; loop1<10; loop1++)
     {
          cout << sal_des[loop1];
    }
}

int main()
{
    Salary sal1;
     sal1.display_des();
    return 0;
}

此外,函数 display_des() 中的另一个错误显示为 sal 未在此范围内声明

您正在定义一个全局函数

void display_des();

而不是成员函数

void Salary::display_des();

这意味着 display_des 没有 "this"- Salary-object 可以从中获取成员 sal[]。您也不从外部向它传递 Salary-object,那么它应该使用哪个 sal[]?

所以要么你使用这样的友元函数:

void display_des(Salary& obj){
    obj.sal[...]...
}

或者你使用一个类似这样的成员函数:

class Salary
{
private:
    int sal[10];

public:
    (...)
    void display_des();
    (...)
};
(...)
void Salary::display_des(){
    sal[...]...
    (...)
}