声明了友元但是不能访问私有函数
classCStr{public:CStr(stringn);CStr(stringn,strings);friendvoiddisplay();voiddisplay_...
class CStr
{
public:
CStr(string n);
CStr(string n,string s);
friend void display ();
void display_CStr(string &st);
~CStr(){};
public:
private:
string str;
string name;
};
void display(CStr & str1)
{
cout << str1.name << str1.name << endl; //报错不能访问私有函数 未检测到display为友元
} 展开
{
public:
CStr(string n);
CStr(string n,string s);
friend void display ();
void display_CStr(string &st);
~CStr(){};
public:
private:
string str;
string name;
};
void display(CStr & str1)
{
cout << str1.name << str1.name << endl; //报错不能访问私有函数 未检测到display为友元
} 展开
2个回答
展开全部
代码修改如下:
#include<iostream>
using namespace std;
const float PI=3.141593;
class Circle;
class Cylinder{
private:
double h;
public:
Cylinder(double h1) :h(h1){} // 构造函数
void Volume(Circle&ci); // 先声明,函数定义写在Circle定义的后面
};
class Circle{
private:
double x; double y; double r;
public:
Circle(double x1,double y1,double r1) :x(x1),y(y1),r(r1){} // 构造函数
friend void Cylinder::Volume(Circle&ci) ; // ok,声明为友元函数
};
void Cylinder::Volume(Circle&ci) // 定义写在Circle后面,不然不能调用其成员
{
double m=PI*ci.r*ci.r*h;
cout<<"体积为"<<m;
}
int main()
{
Circle ci(12.0,15.0,10.0);
Cylinder cy(10.0) ;
cy.Volume(ci) ; // 调用
return 0;
}
以上回答你满意么?
#include<iostream>
using namespace std;
const float PI=3.141593;
class Circle;
class Cylinder{
private:
double h;
public:
Cylinder(double h1) :h(h1){} // 构造函数
void Volume(Circle&ci); // 先声明,函数定义写在Circle定义的后面
};
class Circle{
private:
double x; double y; double r;
public:
Circle(double x1,double y1,double r1) :x(x1),y(y1),r(r1){} // 构造函数
friend void Cylinder::Volume(Circle&ci) ; // ok,声明为友元函数
};
void Cylinder::Volume(Circle&ci) // 定义写在Circle后面,不然不能调用其成员
{
double m=PI*ci.r*ci.r*h;
cout<<"体积为"<<m;
}
int main()
{
Circle ci(12.0,15.0,10.0);
Cylinder cy(10.0) ;
cy.Volume(ci) ; // 调用
return 0;
}
以上回答你满意么?
追问
...够了 表复制粘贴
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询