如何在不包含头的情况下,转发声明的类也能成功编译?

问题描述 投票:0回答:1

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"
c++ include forward-declaration
1个回答
0
投票

我很困惑,仅靠前向声明就能成功编译这段代码?

class ClassB;

class ClassA
{
    ClassB *b;
};

这段代码不需要知道下面的定义。ClassB所以它不需要包含这个定义就可以工作。为了声明一个指向该类型的指针,只要知道该类型存在就足够了。类的声明就实现了这一点。

© www.soinside.com 2019 - 2024. All rights reserved.