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 的类型没有定义!
够清楚了吧。。。