求助:C++ 成员函数作为另外一个类的友元函数的问题

下面是我写的程序,为什么成员函数作为另外一个函数的友元函数时无法访问另外一个类的私有成员?
#include<iostream>
using namespace std;
class man;
class book{
protected:
char *bname;
public:
book(char *b){
bname=new char[strlen(b)+1];
strcpy(bname,b);
}
~book(){
delete[]bname;
}
friend void man::show_book(book &b1);
};
class man{
char *name;
public:
man(char *n){
name=new char[strlen(n)+1];
strcpy(name,n);
}
~man(){
delete[]name;
}
void show_name(){
cout<<"姓名"<<name<<endl;
}
void show_book(book &b1){
cout<<"借的书有"<<b1.bname;
}
};
void main(){
man m("huang");
book a("C++");
m.show_book(a);
}
在man类里面定义只是为了学习一下友元函数,不是为了显示。

私有成员只有类自己可以访问,友元函数当然不能访问啊。
可以这样,在book类中定义一个public函数:
char *GetBookName()
{
return bname;
}
这样调用:
void show_book(book &b1)
{
cout<<"借的书有"<<b1.GetBookName();
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-04-27
这是应为man类在class book中是不可见的所以编译的时候会报错有man没有定义。

不过为什么要把void show_name(book &b1)这个函数定义在man类里面呢,在它的形参里已经指明了要输出的book类的地址,这样就算是把它定义在man类里
输出的时候也不会更man类有任何关系。只和b1是谁有关。也就是说
void show_name(book &b1)这个函数不要定义在man里。就不会有错了。
第2个回答  2010-04-27
把整个类作为友元就OK了;
在class book里加上friend class man;
代码如下:
#include<iostream>
using namespace std;

//class man;
class book
{
protected:
char *bname;
public:
book(char *b)
{
bname=new char[strlen(b)+1];
strcpy(bname,b);
}
~book()
{
delete[]bname;
}
// friend void man::show_book(book &b1);
friend class man;
};

class man
{
char *name;
public:
man(char *n)
{
name=new char[strlen(n)+1];
strcpy(name,n);
}
~man()
{
delete[]name;
}
void show_name()
{
cout<<"姓名"<<name<<endl;
}
void show_book(book &b1)
{
cout<<"借的书有"<<b1.bname;
}
};

void main()
{
man m("huang");
book a("C++");
m.show_book(a);
}
这样解决还行啊,楼主
第3个回答  2010-04-28
问老师哦
相似回答