说我有这两个类:
// a.h
#include "b.h"
和
// b.h
include "a.h"
我知道这里有一个问题,但是如何修复它并在a
类中使用b
个对象及其方法,反之亦然?
答案 0 :(得分:2)
您可以使用前向声明,如下所示:
class B;
class A
{
B* ThisIsValid;
}
class B
{
A SoIsThis;
}
有关详细信息,请参阅this SO问题。
对于预处理器#include
,可能有更好的方法来组织代码。但是,如果没有完整的故事,很难说。
答案 1 :(得分:1)
延伸@Borealid的回答:
为避免循环包含问题,请使用“包含警卫”
例如
#ifndef MYFILE_H /* If this is not defined yet, it must be the first time
we include this file */
#define MYFILE_H // Mark this file as already included
// This only works if the symbol we are defining is unique.
// code goes here
#endif
答案 2 :(得分:0)
您可以使用所谓的“前向声明”。
对于一个函数,这就像void myFunction(int);
。对于变量,它可能看起来像extern int myVariable;
。对于课程class MyClass;
。这些脱胎语句可以包含在实际的代码承载声明之前,并为编译器提供足够的信息来生成使用声明类型的代码。
为了避免循环包含问题,使用“包含保护” - 每个头文件顶部的#ifdef
会阻止它被包含两次。
答案 3 :(得分:0)
“other”类只能有一个引用或指向“first”类的指针。
文件a.h中的:
#include "b.h"
struct a {
b m_b;
};
文件b.h中的:
struct a;
struct b {
a* m_a;
};
void using_the_a_instance(b& theb);
在文件b.cpp中:
#include "b.h"
#include "a.h"
void using_the_a_instance(b& theb)
{
theb.m_a = new a();
}