我有两个类,比如A类和B类。我的目标是让两个类都使用每个函数。问题是,多文件包含结构似乎不允许我这样做。这就是我想要做的事情:
#file A.h
Class A{
public:
int GetInfo();
private:
B * ptrToB;
};
#file B.h
Class B{
public:
int getStuff();
private:
A * ptrToA;
};
我的目标是让A类方法能够调用ptrToB->getStuff()
,并使B类方法能够调用ptrToA->getInfo()
这可能吗?怎么会这样?如果没有,为什么不呢?
答案 0 :(得分:4)
也许使用前向声明?
#file A.h
#ifndef ACLASS_H
#define ACLASS_H
Class B;
Class A{
public:
int GetInfo();
private:
B * ptrToB;
};
#endif
然后在CPP文件中。
#file A.cpp
#include "B.h"
A::A() : ptrToB(0)
{
// Somehow get B
}
int A::GetInfo()
{
// Return whatever you need in here.
}
对于B类H和CPP文件也会这样做。
前向定义允许编译器在不需要显式定义的情况下识别类型。如果您在A类中引用了B,则必须包含B的标题。
由于您使用指针访问B,因此在您访问内部数据之前(在CPP文件内),编译器不需要知道内部数据。
// Would need the header because we must know
// the size of B at compile time.
class B;
class A
{
B theB;
}
// Only need forward declaration because a
// pointers size is always known by the compiler
class B;
class A
{
B * bPointer;
}
答案 1 :(得分:2)
只需向文件A.h添加一个前向声明,因此编译器知道B*
是指向稍后定义的类的指针:
class B;
然后定义您的class A
并在此之后加入B.h.这样,包括A.h在内的任何人都会定义class A
和class B
。
在B.h开始时只包括A.h.这样,包括B.h在内的任何人也都会定义class A
和class B
。
在关联的.cpp文件中定义函数时,您将拥有两个类,并且可以根据需要编写函数。
此问题称为mutual recursion。
答案 2 :(得分:2)
您可以使用前向声明来破坏依赖项:
#file A.h
Class A{
public:
int GetInfo();
private:
B * ptrToB;
};
#file B.h
struct A;
Class B{
public:
int getStuff();
private:
A * ptrToA;
};
然后你可以在A.cpp中的B.cpp和B.h中包含A.h
而不会出现问题。