q***s 发帖数: 2243 | 1 在做一个程序,需要用到两个class的交叉引用,比如在A类中要用到B类的实例,同样在B
类中也需要用到A类的实例,我把两个类是放在两个文件中,分别为a.h, a.cpp, b.h, b.
cpp,但是,问题是我无论如何也不能让编译器认识这是两个类。
请教高手,如何放置头文件才可以实现编译通过。
我的文件大概如下:
文件a.h
#ifndef a_h
#define a_h
class A
{
vector mylist;
}
#endif
文件b.h
#ifndef b_h
#define b_h
class B
{
public:
void print(A aa);
}
#endif |
a***o 发帖数: 969 | 2 where is your include
B
b.
【在 q***s 的大作中提到】 : 在做一个程序,需要用到两个class的交叉引用,比如在A类中要用到B类的实例,同样在B : 类中也需要用到A类的实例,我把两个类是放在两个文件中,分别为a.h, a.cpp, b.h, b. : cpp,但是,问题是我无论如何也不能让编译器认识这是两个类。 : 请教高手,如何放置头文件才可以实现编译通过。 : 我的文件大概如下: : 文件a.h : #ifndef a_h : #define a_h : class A : {
|
q***s 发帖数: 2243 | 3 每个cpp文件include他自己的头文件
我在头文件中放进了要用的类的文件,如下
文件a.h
#ifndef a_h
#define a_h
#include "b.h" //好像不行
class A
{
vector mylist;
}
#endif
文件b.h
#ifndef b_h
#define b_h
#include "a.h" //好像这样不行的
class B
{
public:
void print(A aa);
}
#endif |
a***o 发帖数: 969 | 4 class后面的分号呢
【在 q***s 的大作中提到】 : 每个cpp文件include他自己的头文件 : 我在头文件中放进了要用的类的文件,如下 : 文件a.h : #ifndef a_h : #define a_h : #include "b.h" //好像不行 : class A : { : vector mylist; : }
|
q***s 发帖数: 2243 | 5 分号我忘了加了,确定不是因为这个问题
因为编译器说:
1、A中B没有定义
2、B中A没有定义
3、print不是一个函数
当然,include的头文件不同,每次并不是都给出这三个错误
我觉得就是头文件组织的不好 |
a***o 发帖数: 969 | 6 那在家一个declaration
a的定义前加class b;
b同理
【在 q***s 的大作中提到】 : 分号我忘了加了,确定不是因为这个问题 : 因为编译器说: : 1、A中B没有定义 : 2、B中A没有定义 : 3、print不是一个函数 : 当然,include的头文件不同,每次并不是都给出这三个错误 : 我觉得就是头文件组织的不好
|
q***s 发帖数: 2243 | 7 多谢!!!!
可以了。只加头文件还不行,还必须在两个类的定义里加上对方的声明。
谢谢! |
o******r 发帖数: 259 | 8 exactly
【在 a***o 的大作中提到】 : 那在家一个declaration : a的定义前加class b; : b同理
|