可以通过预处理宏来控制重复包含的问题
如果是模板类,那么类成员函数声明为内联的即可
例如
//A.h
#pragma once
#include "B.h"
templateclass B;
templateclass A
{
public:
A(B* b=NULL):b_(b){};
void SetPtr(B* b)
{
b_ = b;
}
void CallFuncFromB()
{
b_->PrintfB();
}
void PrintfA()
{
cout<<"PrintfA"<}
public:
B* b_;
};
//B.h
#pragma once
#include "A.h"
templateclass A;
templateclass B
{
public:
B(A* a=NULL):a_(a){}
void SetPtr(A* a)
{
a_ = a;
}
void CallFuncFromA()
{
a_->PrintfA();
}
void PrintfB()
{
cout<<"PrintfB"<}
public:
A* a_;
};
//main.cpp
#include
#include "A.h"
using namespace std;
int main(int argc, char** argv)
{
Aa;
Bb;
a.SetPtr(&b);
b.SetPtr(&a);
a.CallFuncFromB();
b.CallFuncFromA();
system("pause");
return 0;
}
//这种方法有一种限值条件,就是模板类A和B的模板参数要求一致。
互相包含绝对是不行,这会导致包含产生一个类似递归的死循环,既然互相包含不行那么肯定有一方是不可能知道对方的实现细节的,也就不可能通过对象.成员的方式来调用.但是你可以尝试使用回调函数和管理类(已被否决)的方式来解决该问题.
在头文件用下面的宏把代码包起来, 这样可以防止重复。 你说的相互包含,没有问题的啊。
#ifndef _FILENAME_H
#define _FILENAME_H
#endif