当前位置: 代码迷 >> Windows Mobile >> C++ 两个类相互定义指针,并使用的有关问题
  详细解决方案

C++ 两个类相互定义指针,并使用的有关问题

热度:90   发布时间:2016-04-25 07:46:34.0
C++ 两个类相互定义指针,并使用的问题
c++ 定义两个类,
class A
{}

class B
{}

分别在各自的头文件里include 另一个头文件,
然后定义一个该类的指针,
比如
A.h文件中
#include "B.h"
class A
{
.....


public:
B *b; // 定义一个B的指针
.....
}

然后在A.cpp文件中使用该指针变量
class A
{
.....


b = new B() ; // 定义一个B的指针
b->show; // 使用指针b
.....
}
以上整个过程编译正常,程序运行正常,
然后在B.h文件里include "A.h"并定义一个A *a,想在B.cpp文件里new 然后使用,但是就会编译报错,错误信息是
Multiple markers at this line
- ISO C++ forbids declaration of `A' with no type
- expected `;' before '*' token

请问这是什么错误?如何解决?





------解决方案--------------------
在B.h声明class A,不要include

相互依赖的问题,就像鸡生蛋,蛋生鸡。。
------解决方案--------------------
把include "A.h"改成class A;
------解决方案--------------------
A,B类互相包含出现 A 或 B 类型没有定义的错误,原因如下:

你出现 A 类没有定义的错误,那么你的编译器首先编译的应该
是 A.cpp 文件。

在编译 A.cpp文件前,编译器首先要把 A.cpp的包含文件“导入”,展开,
最后形成的导入后的待编译 伪A.cpp内容如下 :

-----------------------------
// B.h 中的 #include A.h 因为在 A.cpp 包含 a.h 时已经展开过,所以
// B.h 中包含的 A.h 将不再展开,所以头文件导入到此结束。
// includ B.h( A.h 包含的 B.h 的展开 )
class B {
 ......
 A * a ;
};

// include A.h
class A{
 .....
 
 B * b ;
};

A::A()
{
}
......省略
--------------------------------

展开完成后,你会发现,class B 中的 A * a前面并不再有 class A的定义,
所以编译器报 A 的类型没有定义!

够清楚了吧。。。
  相关解决方案