当我尝试以下操作时,GCC编译器会抱怨(见下文).class Face需要不完整,因为它包含指向class Element同样包含指针的指针class Face.换句话说,类之间存在循环依赖关系.我该如何解决?
错误:'sizeof'无效应用于不完整类型'Face'
class Face; // needs to be incomplete
class Element
{
std::vector < std::unique_ptr <Face> > face;
};
class Face
{
std::vector < std::unique_ptr <Element> > elm;
};
Run Code Online (Sandbox Code Playgroud) 假设我有一些不完整的类型
// in foo.hh
struct Hidden;
Run Code Online (Sandbox Code Playgroud)
我想用作 a 的元素类型std::vector。使用unionI 可以“推迟”对构造函数和析构函数的调用以std::vector实现联合构造函数/析构函数。
// in foo.hh
struct Public {
union Defer {
std::vector<Hidden> v;
Defer();
// add copy/move constructor if needed
~Defer();
} d;
};
Run Code Online (Sandbox Code Playgroud)
现在我只能Public通过包含foo.hh和链接实现Public::Defer::Defer()和的文件来使用Public::Defer::~Defer()。只有那些需要访问Hidden.
这是合法的 C++ 吗?如果有,从什么时候开始?
背景:我在回答另一个问题时提出的问题。