君子性非异也,善假于物也。

如有恒,何须三更起,半夜眠;最怕莫,三天打鱼两天晒网,竹篮打水一场空!
posts - 31, comments - 23, trackbacks - 0, articles - 30
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

大瓶子与小瓶子的问题

Posted on 2006-11-15 14:01 neter 阅读(309) 评论(0)  编辑 收藏 引用 所属分类: 程序设计
class  B;

class  A
{
public :
    A(
void );
    
~ A( void );
    B b;
}
;

A::A(
void )
{
}


A::
~ A( void )
{
}


class  B
{
public :
    B(
void );
    
~ B( void );
    A a;
}
;

B::B(
void )
{
}


B::
~ B( void )
{
}


int  main()
{
    
return   0 ;

}
在编译器中编译要报的错误即是:  error C2079: 'A::b' uses undefined class 'B'
原因是什么呢?从代码来看,用了类的前视的啊,不应该有什么问题的啊.
但因为在分配内存空间的时候,不知道其class B 的大小,所以没有办法为其分配存储空间,随即报出了一个没有定义的错误.
其解决的方案有两种,如下事例:
方案A:
class B;

class A
{
public:
    A(
void);
    
~A(void);
    B b();
}
;

A::A(
void)
{
}


A::
~A(void)
{
}


class B
{
public:
    B(
void);
    
~B(void);
    A a();
}
;

B::B(
void)
{
}


B::
~B(void)
{
}


int main()
{
    
return 0;

}
显示地调用一下其构造函数构造一个具体的实例出来即有了固定的存储空间
方案B:
class B;

class A
{
public:
    A(
void);
    
~A(void);
    B 
*b;
}
;

A::A(
void)
{
}


A::
~A(void)
{
}


class B
{
public:
    B(
void);
    
~B(void);
    A 
*a;
}
;

B::B(
void)
{
}


B::
~B(void)
{
}


int main()
{
    
return 0;

}
用指针来存储其一个地址而已,具体的大小等到用的时候再为其实际分配.

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理