无法通过好友功能访问私人会员

时间:2017-03-18 13:52:48

标签: c++ friend

#include <iostream>
using namespace std;

class S;

class R {
        int width, height;
        public:
        int area ()   // Area of rectangle
   {return (width * height);}
    void convert (S a);  
};
class S {
   private:
   int side;
   public:
   S (int a) : side(a) {}
   friend void convert(S a);

};

void R::convert (S a) {    
   width = a.side;
   height = a.side;    // Interpreting Square as an rectangle
}
int main () {

   int x;

   cin >> x;
   R rect;
   S sqr (x);
   rect.convert(sqr);
   cout << rect.area();
   return 0;
}

我收到以下错误:

  

prog.cpp:在成员函数'void R :: convert(S)'中:prog.cpp:26:14:   错误:'int S :: side'在此上下文中是私有的       width = a.side;                 ^ ~~~ prog.cpp:16:8:注意:在这里声明私有       int side;           ^ ~~~ prog.cpp:27:15:错误:'int S :: side'在此上下文中是私有的       身高= a.side; //将Square解释为矩形                  ^ ~~~ prog.cpp:16:8:注意:在这里声明私有       int side;           ^ ~~~

我尝试将友元功能函数设为私有,但同样的错误。 请帮忙

2 个答案:

答案 0 :(得分:0)

class S中的

您应该friend R;

friend void convert(S a);没有意义,因为编译器甚至不知道转换属于R而不是S.

答案 1 :(得分:0)

对于初学者,名称S在声明

中首次使用之前未声明
void convert ( S a);  

其次,您必须指定函数convert是类R的成员函数。

尝试以下

class R {
        int width, height;
        public:
        int area ()   // Area of rectangle
   {return (width * height);}
    void convert ( class S a);  
                   ^^^^^^
};
class S {
   private:
   int side;
   public:
   S (int a) : side(a) {}
   friend void R::convert(S a);
              ^^^ 
};