乌合之众!
我的例子:
ClassA.h
#pragma once
#include "ClassB.h"
class ClassA
{
public:
ClassA();
~ClassA();
int a;
};
ClassB.h
#pragma once
#include "ClassA.h"
class ClassB :public ClassA
{
public:
ClassB();
~ClassB();
};
由于ClasssA.h中包含了ClassB.h,预编译器看到#include "ClassB.h",将ClassB.h中的内容复制到ClassA.h中,由于class ClassB :public ClassA,但是这时classA还在编译过程中,因此报错 “基类未定义”。
如果classB不继承classA,则即使两个头文件相互包含也不会报错。
预处理与#include
预处理器在遇到#include<> 或者 #include " ", 会将其替换为他们包含的头文件中的内容,形成 .i文件。
https://blog.csdn.net/xiaoxiangguanzhu/article/details/93754010
Ref: