为什么错误“未在此范围内声明”显示?

时间:2016-02-17 10:49:08

标签: c++ function oop member friend-function

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

#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未在此范围内声明

1 个答案:

答案 0 :(得分:2)

您正在定义全局函数

void display_des();

而不是成员函数

void Salary::display_des();

这意味着display_des没有&#34;这个&#34; - 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[...]...
    (...)
}
相关问题