TestB.h (前置声明,无需在源文件include)重点:
1.前置声明用在指针变量使用,无需在头文件或源文件include
2.继承或者普通变量在头文件使用的时候(除非所有的编译顺序都正确,才能在源文件include),最好不要在源文件include,除非大型工具库(依赖顺序非常清晰)。
示例:
TestA.h
class TestA
{
public:
TestA() {};
virtual ~TestA() {};
public:
int a=0;
};
TestB.h (前置声明,无需在源文件include)
#pragma once
class TestA;
class TestB
{
public:
TestB() {};
virtual ~TestB() {};
public:
TestA* a;
};
TestB.h (继承,普通变量(最好用指针替代,防止内存爆炸))
#pragma once
#include "TestA.h"
class TestB :public TestA
{
public:
TestB() {};
virtual ~TestB() {};
};
#include "TestA.h"
class TestB
{
public:
TestB() {};
virtual ~TestB() {};
TestA a;
};
TestC.h(继承编译顺序,include顺序)
#pragma once
class TestC :public TestA
{
public:
TestC() {};
virtual ~TestC() {};
void Get();
};
#include "TestA.h"
#include "TestC.h"
void TestC::Get()
{
}
顺序不正确会导致未定义基类