#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; ^ ~~~
我尝试将友元功能函数设为私有,但同样的错误。 请帮忙
答案 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);
^^^
};