小问题....

fdar 2009-03-03 03:30:26
是关于友元的


#include <iostream>
using namespace std;

class c;



class p {

public:
p(): a(2), b(3){}
int a1(c &d)const;
int a2()const
{ return b;}
private:
int a, b;
};

class c {
public:
friend int p::a1(c &d)const;
c(): a(2), b(3){}
int a1()const{ return a;}
int a2()const{ return b;}
private:
int a, b;
};

int p::a1(c &d)const{ return a + d.a;}

int main() {
p pp;
c a;
cout << pp.a1(a) <<" " << pp.a2();
system("pause");
return 0;
}





但是改成这样子

#include <iostream>
using namespace std;

class c;



class p {

public:
p(): a(2), b(3){}
int a1(c &d)const{ return a + d.a;} //换这里
int a2()const
{ return b;}
private:
int a, b;
};

class c {
public:
friend int p::a1(c &d)const;
c(): a(2), b(3){}
int a1()const{ return a;}
int a2()const{ return b;}
private:
int a, b;
};


int main() {
p pp;
c a;
cout << pp.a1(a) <<" " << pp.a2();
system("pause");
return 0;
}



或者这样子

#include <iostream>
using namespace std;

class c;

int p::a1(c &d)const; //这里

class p {

public:
p(): a(2), b(3){}
int a1(c &d)const{ return a + d.a;}
int a2()const
{ return b;}
private:
int a, b;
};

class c {
public:
friend int p::a1(c &d)const;
c(): a(2), b(3){}
int a1()const{ return a;}
int a2()const{ return b;}
private:
int a, b;
};



int main() {
p pp;
c a;
cout << pp.a1(a) <<" " << pp.a2();
system("pause");
return 0;
}



就不行吗,我的理解是因为函数的入口是MAIN,所以到MAIN调用的时候前面的CLASS应该都遍历过才是啊。。。为什么只有第一种才可以呢。
...全文
108 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
up过,有空来看
太乙 2009-03-03
  • 打赏
  • 举报
回复
编译器比较笨!!
fdar 2009-03-03
  • 打赏
  • 举报
回复
谢谢啊,脑袋有点糊涂了。。
pengzhixi 2009-03-03
  • 打赏
  • 举报
回复
因为你第2种只是先声明了class c然后就在class p里面使用c对象里面的成员.使用成员必须要构造对象,而构造对象必须要求定义完整.
hujihong 2009-03-03
  • 打赏
  • 举报
回复
up

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧