测试环境:Windos 7 ,Ide :VS2010
这里有5个文件,TestCpp.cpp,TestA.h/cpp,TestB.h/cpp
TestCpp.cpp
#include "stdafx.h"
#include "TestA.h"
#include "TestB.h"
int _tmain(int argc, _TCHAR* argv[])
{
TestA *testA = new TestA;
TestB *testB = new TestB;
delete testA;
delete testB;
return 0;
}
TestA.h
#pragma once
#include "TestB.h"
class TestA
{
public:
TestA(void);
~TestA(void);
private:
TestB *m_testB;
};
TestA.cpp
#include "StdAfx.h"
#include "TestA.h"
TestA::TestA(void)
{
}
TestA::~TestA(void)
{
}
TestB.h
#pragma once
class TestA;
class TestB
{
public:
TestB(void);
~TestB(void);
private:
TestA m_testA;
};
TestB.cpp
#include "StdAfx.h"
#include "TestB.h"
TestB::TestB(void)
{
}
TestB::~TestB(void)
{
}
总结:在两个类互相引用的情况下,正确的做法是
1、 在TestA的类中添加TestB的头文件,并在TestA类中声明TestB的指针变量。
2、 在TestB头文件中添加TestA的类声明,并在TestB类中声明TestA的实例变量。
这里我们的实例变量对应头文件,指针变量对应类声明。不可以两个类中都声明为类的实例变量,至少要求一个为指针变量,且保持正确的顺序,或者两个都是指针变量。