在我的 GUI 系统中,主要的构建块是Container
类,可以绘制(= 是可绘制的)。然而,Container
它本身是一种“表格”——它包含单元格。
Cell
类用于布局。容器的单元格数由行数和列数定义。Cell
对象不可见。
这就是问题所在。Cell
无法绘制对象 - 它们包含Container
对象,这些Cell
对象在调用cell.draw()
.
我知道这可以通过使用原始指针来轻松解决,以避免在此处创建循环依赖,但如果可能的话,我想使用智能指针。但是,根据我得到的错误,很明显智能指针必须知道对象的大小,这与原始指针不同。
Unique_ptr 错误
/usr/include/c++/4.8/bits/unique_ptr.h:65:22: error: invalid application of ‘sizeof’ to incomplete type ‘Container’
static_assert(sizeof(_Tp)>0,
容器.hpp
#include <Cell.hpp> // Causes circular dependency
class Cell; // Causes error: invalid application of ‘sizeof’
class Container
{
// ...
private:
std::vector<std::unique_ptr<Cell>> cells;
// ...
}
细胞.hpp
#include <Container.hpp> //Causes circular dependency
class Container; // Causes error: invalid application of ‘sizeof’
class Cell
{
// ...
private:
std::vector<std::unique_prt<Container>> subcontainers;
// ...
}
有没有一种很好的方法来解决使用智能指针的情况(也许通过重新设计整个问题解决方案),或者我必须在这里使用原始指针?