免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5792 | 回复: 11
打印 上一主题 下一主题

[C++] 请教c++的类声明问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-02 16:57 |只看该作者 |倒序浏览
#include <iostream>
using namespace std;

class AAA;

class BBB{
public:
    void friendShow(AAA& a){
        AAA *x;//为什么必须要指针?
        //a.show();为什么会失败呢?? :'.show' must have class/struct/union type
        //AAA xx;就抱错:error C2079: 'x' uses undefined class 'AAA'

    }
};

class AAA{
    int x,y;
public:
    void show(){
        cout<<"hello,world!\n";
    }

};


int main()
{

    return 0;
}
请问这里是规定必须要指针才行吗?怎么解释?
a.show()为什么不能成功??

[ 本帖最后由 uusex 于 2009-3-2 17:01 编辑 ]

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
2 [报告]
发表于 2009-03-02 17:03 |只看该作者
class AAA{
    int x,y;
public:
    void show(){
        cout<<"hello,world!\n";
    }

};

AAA的定义在下边呢。。把它移到上边。。

论坛徽章:
0
3 [报告]
发表于 2009-03-02 17:07 |只看该作者
那如果我B里面定义了A,A里面又定义了B呢.
这个class A声明没用?

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
4 [报告]
发表于 2009-03-02 17:07 |只看该作者
定义一个对象和使用他的成员的前提是,这个类已经定义(声明是不够的)。

你在那里用AAA的指针,能定义指针,但是照样不能使用x->show()来调用这个AAA的成员函数。

论坛徽章:
0
5 [报告]
发表于 2009-03-02 17:10 |只看该作者
"定义一个对象和使用他的成员的前提是,这个类已经定义(声明是不够的)。"

就差你这句话了,原来是这样子.

按这么说,根本就不可能同时 B里面定义了A变量,A里面又定义了B变量了?

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
6 [报告]
发表于 2009-03-02 17:12 |只看该作者

回复 #3 uusex 的帖子

你可以在BBB类里只声明:
void friendShow(AAA& a);


这样:
然后把定义写到两个类定义之后;
class BBB
{
    void friendShow(AAA& a);
};

class AAA
{
};

void BBB::friendShow(AAA& a)//在这里才定义
{//这里就可以定义AAA的对象了
}

[ 本帖最后由 yangsf5 于 2009-3-2 17:14 编辑 ]

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
7 [报告]
发表于 2009-03-02 17:15 |只看该作者

回复 #5 uusex 的帖子

参见我6楼回复。

论坛徽章:
0
8 [报告]
发表于 2009-03-02 17:15 |只看该作者
谢谢你的热心回答,刚才我就这么试了一下,发现就应该这么弄。

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
9 [报告]
发表于 2009-03-02 17:20 |只看该作者

回复 #8 uusex 的帖子

呵呵,不用客气。。
其实书上有讲的。仔细看书。(C++ Primer上有,只是不知道你有没有看这本书)

论坛徽章:
0
10 [报告]
发表于 2009-03-02 18:07 |只看该作者
//AAA xx;就抱错:error C2079: 'x' uses undefined class 'AAA'

这是因为声明class AAA时,需要为xx分配内存,但是class AAA还未定义,

于是不知到底为他分配多少内存,所以C++中不允许定义未定义的对象。

//a.show();为什么会失败呢?? :'.show' must have class/struct/union type

这个错误貌似可以用上面的解释吧。


小弟不才,还望各路高手继续拍砖~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP