声明了友元但是不能访问私有函数

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为友元
}
展开
 我来答
恬适又爽口的萨摩耶2900
2014-08-23 · TA获得超过456个赞
知道答主
回答量:168
采纳率:100%
帮助的人:61.4万
展开全部
代码修改如下:
#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;
}
以上回答你满意么?
追问
...够了 表复制粘贴
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zjfaok
推荐于2016-03-17 · TA获得超过6806个赞
知道大有可为答主
回答量:4146
采纳率:62%
帮助的人:1604万
展开全部
friend void display();
       void display(CStr & str1)

怎么看都不是同一个函数,参数列表都不一样

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式