一个类的成员函数引用另一个类的类型指针,编译通不过

alxen 2007-11-30 08:30:04
一个类play的成员函数music_play要使用另一个类的类型指针,友元设置的工作也做了,可就是编译不通过。
//play.h 内容如下

#include"list.h"
class play{
public:
int music_play(list*);//用于播放列表歌曲
};

//list.h 内容如下

#include"play.h"
class list{
friend class play;//声明play类为友元类
public:
//代码省略
};


我用的VC++ 2005,明明在list类中已经声明play类为友元类了,可是编译时却提示play类中成员函数music_play(list*)的形参list错误。

play.h(17):error C2061: 语法错误 : 标识符“list”

百思不得其解,望各位解答。
...全文
146 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
PcrazyC 2007-12-02
  • 打赏
  • 举报
回复
TO 12楼:
不可能吧,你是不是在别的地方将两个文件都include了
alxen 2007-12-01
  • 打赏
  • 举报
回复
PcrazyC 兄的代码没有问题,已经编译通过。兄台写的是类B要使用类A的东西,按照 xalangying 兄的办法,我只是在类B中include"a.h",然后在类A中用friend class B;连include"b.h"都不用就OK了。
然而 xalangying 兄修改的方法在我的程序里就是不行,还是开始那个错误。我是真的晕了。
我的play类要使用list类的类型指针做形参,却必须在play类中声明类list为友元类,并且这样的话双方居然都不用include对方就编译通过。
还是困惑~~~
xiaoQ008 2007-12-01
  • 打赏
  • 举报
回复
jie fen
luckqt 2007-12-01
  • 打赏
  • 举报
回复
jf~
litomboy 2007-12-01
  • 打赏
  • 举报
回复
接分!!
Treazy 2007-11-30
  • 打赏
  • 举报
回复
jf!
PcrazyC 2007-11-30
  • 打赏
  • 举报
回复
晕哦,怎么又碰到石头了,石头,我恨死你了
PcrazyC 2007-11-30
  • 打赏
  • 举报
回复
是不是你头文件包含的问题,你把LIST.H里面的#include"play.h"注释一下试试
xalangying 2007-11-30
  • 打赏
  • 举报
回复
抱歉原先没有认真看问题就要分,原认为你都解决了,其实你那解决方法不能算是针对这个错误的
你原本错误应该是play类的list没有定义,因为 两个文件都 #include 对方,这样是不行了
只能 一个include 另一个就好了,别一个就用声明吧, 如

//play.h 内容如下
#include"list.h"
class play{
public:
int music_play(list*);//用于播放列表歌曲
};


//list.h 内容如下


class play;
class list{
friend class play;//声明play类为友元类
public:
//代码省略
};

PcrazyC 2007-11-30
  • 打赏
  • 举报
回复
如果类A中要使用类B的东西,应该在类B中声明类A为友元类

应该是这个啊

楼主,你测试一下下面的代码

#include<iostream>
#include<cstdlib>

using namespace std;

class A
{
int x,y;
public:
A(int x,int y):x(x),y(y){};
friend class B;
};

class B
{
int x,y;
public:
B(A a);
void print(A a);
};

B::B(A a)
{
x=a.x;
y=a.y;
}

void B::print(A a)
{
cout<<a.x<<endl<<a.y<<endl;
cout<<x<<endl<<y<<endl;
}

int main()
{
A a(2,3);
B b(a);
b.print(a);
system("pause");
return 0;
}
alxen 2007-11-30
  • 打赏
  • 举报
回复
怎么都像是温柔的打劫我呢?呵呵
还是讨论点技术活吧。有一点不是很明白。
在网上看到很多说如果类A中要使用类B的东西,应该在类B中声明类A为友元类。可是为什么这里明明是类play要使用类list,却要在类play中声明类list为友元类,反过来却不行,到底咋回事?
xalangying 2007-11-30
  • 打赏
  • 举报
回复
都是两条裤衩的兄弟,给我吧,哈哈
alxen 2007-11-30
  • 打赏
  • 举报
回复
PcrazyC 兄,你都三条裤衩了,我才两条。你给我条裤衩我就把分都给你。呵呵~~~
PcrazyC 2007-11-30
  • 打赏
  • 举报
回复
我来接分,给我吧,我缺分
alxen 2007-11-30
  • 打赏
  • 举报
回复
我晕了,问题解决,居然不是在list类中设置play类为友元,而是在play类中设置list类为友元~~~~
终于解决了,继续做播放器了。呵呵。
本帖到此吧。不过也不能浪费了偶的30分,改为交友帖,来者又分。

64,691

社区成员

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

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