私の GUI システムでは、主要なビルディング ブロックは描画可能Container
なクラスです (= 描画可能です)。ただし、それ自体は「一種のテーブル」であり、セルが含まれています。Container
Cell
クラスはレイアウトに役立ちます。コンテナーが持つセルの数は、行と列の数によって定義されます。Cell
オブジェクトは表示されません。
そして、ここに問題があります。Cell
オブジェクトは描画できません。オブジェクトにはオブジェクトが含まれており、呼び出し時にオブジェクトContainer
で定義された規則Cell
(配置、パディングなど)によって描画されますcell.draw()
。
ここで作成された循環依存関係を回避するために raw ポインターを使用することで、これを簡単に解決できることはわかっていますが、可能であればスマート ポインターを使用したいと考えていました。ただし、取得しているエラーによると、生のポインターとは異なり、スマートポインターがオブジェクトのサイズを認識している必要があることは明らかです。
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;
// ...
}
スマート ポインターを使用して状況を解決する良い方法はありますか (おそらく問題の解決策全体を再設計することによって)、またはここで生のポインターを使用する必要がありますか?