游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3804|回复: 8

#include 循环引用,一个C++基础问题,请指教!

[复制链接]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2007-5-13 23:39:00 | 显示全部楼层 |阅读模式
写C++时间也不短了,一个基础问题搞的我头痛,也就是循环引用的问题

///A.h如下:
#pragma once


#ifndef _A__H
#define _A__H
#include "B.h"

class B;          //向前声明

class A
{
        B* d;   /////////位置1
public:
        A(void){}
        ~A(void){}
};
#endif

///B.h如下
#pragma once


#ifndef _B__H
#define _B__H
#include "A.h"

class A;   //向前声明
class B
{
public:
        A* a;  /////////位置2
        B(void){}
        ~B(void){}
};
#endif


上面的编译能通过,但是
位置1改成 B b;
位置2改成 A a;


就会出现找不到类型,报错,也就是循环#include的错误?
不知道怎么解决?试过很多方法都不行

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2007-5-14 00:44:00 | 显示全部楼层

Re:#include 循环引用,一个C++基础问题,请指教!

申明一个类的对象,编译器需要知道该类的实际SIZE好分配内存为这个类的对象。反之,申明类的对象指针时,则编译器无需知道该对象的实际大小,因为是指针的关系。

这个是基础的C++知识,楼主可要好好的复习一下了。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-5-14 00:50:00 | 显示全部楼层

Re:#include 循环引用,一个C++基础问题,请指教!

恩,的确。貌似复杂的问题,其实是基础知识忽略了,非常感谢。
看来前面的做法是行不通的,第一个位置改成声明成类的对象实际上是可以的,而第二个位置却只能是指针声明了,而不可能是对象的声明,看来出现类似这样问题的时候,不妨试试把对象声明改成指针声明来调整结构

10

主题

219

帖子

236

积分

中级会员

Rank: 3Rank: 3

积分
236
QQ
发表于 2007-5-14 10:13:00 | 显示全部楼层

Re:#include 循环引用,一个C++基础问题,请指教!

更本质的问题是类的设计

85

主题

824

帖子

878

积分

高级会员

Rank: 4

积分
878
QQ
发表于 2007-5-14 10:33:00 | 显示全部楼层

Re:#include 循环引用,一个C++基础问题,请指教!

嗯,
楼主要复习一下Effective C++ 中“类和函数: 设计与声明”和“类和函数: 实现”这两章了

11

主题

112

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2007-5-14 12:23:00 | 显示全部楼层

Re:#include 循环引用,一个C++基础问题,请指教!

已经#include"b.h"了,后面又来个class B
这不是互相包含吗,类设计有问题

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-5-14 12:40:00 | 显示全部楼层

Re:#include 循环引用,一个C++基础问题,请指教!

这并不是设计的问题,类相互依赖是常有的事情,只是不能声明为对象,
可以声明为指针。Effective C++ 很久没去看了。呵呵。。。

感谢大家的指正。

36

主题

197

帖子

197

积分

注册会员

Rank: 2

积分
197
发表于 2007-5-14 15:23:00 | 显示全部楼层

Re:#include 循环引用,一个C++基础问题,请指教!

其实很简单,声明一个cobject,然后a,b类都继承自cobject,然后所有a,b的指针都用cobject类型来代替

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-5-14 23:53:00 | 显示全部楼层

Re:#include 循环引用,一个C++基础问题,请指教!

是的,我的程序里面到是有个Entity,场景内的大多对象都是它的子类,基本上都采用了楼上的做法。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 11:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表