怎样在类使用之前 声明它

时间:2021-04-02 20:03:00
我写了一个例子 

class A
{
B  cb;
};

class B
{
A ca;
};
 void mian()
 {
 }


怎么才能正常编译通过呢

10 个解决方案

#1


forward declaration

class B;
class A {
// ...
};
class B {
// ...
};

#2


如楼上的提前声明下就可以了.

#3


提前声明 只能定义指针,
不能普通变量 ~

#4


感谢 
改成指针就通过了 
谢谢各位了

#5


同意二楼!

#6


声明为指针

#7


二楼不对

#8


只能使用提前定义的类来定义指针~!

#9


前置声明只能的用来定义类的指针或者引用,不能用来定义类的对象,因为定义类的对象需要分配内存空间,所以需知道类的成员,这就需类的定义式,而声明不能提供类的成员的信息,而定义类的指针或者引用即可以,因为指针变量的占据的内存,编译器可以知道,一般等于一个机器字长,所以可以。
引用在底层的表达实现,一般通过指针,所以与指针同理
个人意见,高手多多指教

#10


一般情况定义指针,引用的话,由于必须初始化,所以在你的构造函数初始化列表中初始化的时候,仍需要的类定义式,这样把类构造函数放在类的外部实现,作为non-inline函数,和调整位置所花费的开销,不如指针直接。
所以一般定义的类的指针
等待高手指教

#1


forward declaration

class B;
class A {
// ...
};
class B {
// ...
};

#2


如楼上的提前声明下就可以了.

#3


提前声明 只能定义指针,
不能普通变量 ~

#4


感谢 
改成指针就通过了 
谢谢各位了

#5


同意二楼!

#6


声明为指针

#7


二楼不对

#8


只能使用提前定义的类来定义指针~!

#9


前置声明只能的用来定义类的指针或者引用,不能用来定义类的对象,因为定义类的对象需要分配内存空间,所以需知道类的成员,这就需类的定义式,而声明不能提供类的成员的信息,而定义类的指针或者引用即可以,因为指针变量的占据的内存,编译器可以知道,一般等于一个机器字长,所以可以。
引用在底层的表达实现,一般通过指针,所以与指针同理
个人意见,高手多多指教

#10


一般情况定义指针,引用的话,由于必须初始化,所以在你的构造函数初始化列表中初始化的时候,仍需要的类定义式,这样把类构造函数放在类的外部实现,作为non-inline函数,和调整位置所花费的开销,不如指针直接。
所以一般定义的类的指针
等待高手指教