【发布时间】:2021-10-29 08:56:37
【问题描述】:
我在 A.h 文件中有一个类 A,在 B.h 文件中有一个类 B: public A。
A.h 文件
#ifndef A_H
#define A_H
class A
{
public:
void foo {}
};
#endif
B.h 文件
#ifndef B_H
#define B_H
#include "A.h"
class B: public A
{
...
};
#endif
有没有办法包含 B 但在我包含 A.h 之前无法访问 A?
这样
#include "B.h"
main() {
B* b = new B(); //OK
b->foo(); //OK
A* a = new A(); //Error
a->foo(); //Error
}
【问题讨论】:
-
正确不,看起来像 XY 问题,为什么需要它?
-
我想你也许可以用 C++20 模块做到这一点。尽管有人说
B公开继承自A,但这强烈暗示任何知道B是什么的人都应该知道A是什么。 -
@Someprogrammerdude 看起来您误读了这个问题。 OP 希望这是一个错误,直到或除非
A.h直接包含在 main 中 -
根据您到底想做什么,也许将
A拆分为一个接口和一个实现?那么B派生自A_interface,但是A_impl是完全独立的? -
再一次,这很可能是 XY 问题,描述你想要实现的目标,会有更好的解决方案。
标签: c++ inheritance