我有一个圆形标题问题,与这里已经问过的大多数问题不同。我有两个相互依赖但不是成员的类,所以不要遇到编译器无法计算类大小的问题。所以我可以使用前向声明来打破循环。
但是,我不希望客户端必须包含这两个标头才能使用我的类。标头应该是自包含的,因此用户不需要知道这种依赖关系。有没有办法做到这一点?
编辑:棘手的部分是 A 和 B 必须仅定义标题。
在标题 A.hpp
#ifndef A_HPP
#define A_HPP
#include "B.hpp"
struct A
{
B foo() { ... }
};
#endif
在标题 B.hpp
#ifndef B_HPP
#define B_HPP
struct A;
struct B
{
void bar()
{
A a = A();
...
}
};
#endif
在 main.cpp
#include "B.hpp"
B().bar(); // error: 'a' uses undefined class 'A'