ClassA有一个指向classB的成员指针。我在ClassA.h和ClassA.cpp中没有#include "ClassB.h"。这段代码的构建没有错误。
我很困惑,仅靠前向声明就能成功编译这段代码吗?如果不需要头,那么转发类的引用是什么?
我检查了其他可能的重复,但这并不能澄清我的困惑,因为我并不是要求修复代码。
有谁能澄清我的困惑。
ClassA.h
#ifndef CLASS_A
#define CLASS_A
#include <string>
class ClassB;
class ClassA
{
ClassB *b;
};
#endif
ClassA.cpp
#include "ClassA.h
ClassB.h
#ifndef CLASS_B
#define CLASS_B
#include <vector>
#include "ClassA.h"
class ClassB
{
std::vector<ClassA> a;
};
#endif
ClassB.cpp
#include "ClassB.h"
我很困惑,仅靠前向声明就能成功编译这段代码?
class ClassB; class ClassA { ClassB *b; };
这段代码不需要知道下面的定义。ClassB
所以它不需要包含这个定义就可以工作。为了声明一个指向该类型的指针,只要知道该类型存在就足够了。类的声明就实现了这一点。