在我的GUI系统中,主要构建块为Container
类,其中可以绘制为(=可绘制)。但是,Container
本身是'种表' - 它包含单元格。避免循环依赖 - 需要互相遏制
Cell
班级服务于布局。容器所具有的单元格的数量由行数和列数定义。 Cell
对象不可见。
这就是问题所在。 Cell
对象无法绘制 - 它们包含Container
对象,当调用cell.draw()
时,该对象由Cell
对象(对齐方式,填充等等)中定义的规则绘制。
我知道这可以很容易地解决通过使用原始指针来避免这里创建的循环依赖,但我想使用智能指针,如果可能的话。但是,根据错误我得到的,这是明显的智能指针必须知道对象的大小,不像原始指针。
的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,
Container.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;
// ...
}
Cell.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;
// ...
}
是否有正冰的方式如何解决使用智能指针的情况(也许通过重新设计整个问题的解决方案),还是我必须在这里使用原始指针?
我真的不明白你为什么会拥有这种循环。包含包含容器的单元格的Container的* sense *是什么?即使你在*语法*级别完成它,它似乎是糟糕的设计*语义* ... – DevSolar 2015-02-09 17:01:58
你有没有考虑过使用引用而不是指针? – 2015-02-09 17:04:46
我想你应该有一个容器,包含容器:D每个容器都有一个getCells()方法 – Aitch 2015-02-09 17:05:02