Für ein typedef
ein struct
in C, ich kann das nicht tun:Wie deklariert ein selbstreferenzieller Container in C++?
typedef struct {
unsigned id;
node_t *left;
node_t *right;
} node_t;
weil node_t
nicht bekannt ist, bis es definiert ist, so kann es nicht in ihrer eigenen Definition verwendet werden. Ein bisschen Catch-22. Allerdings kann ich diese Abhilfe verwenden, um die gewünschte selbstbezüglicher Art zu machen:
typedef struct node_s node_t;
struct node_s {
unsigned id;
node_t *left;
node_t *right;
};
Ebenso würde ich so etwas wie dies für eine C++ Container selbst bezieht tun:
typedef pair<unsigned, pair<node_t *, node_t * > > node_t;
aber von Natürlich beschwert sich der Compiler, dass es noch nie von node_t
gehört hat, bevor es node_t
definiert wird, wie es für die struct typedef
oben wäre.
Also gibt es einen Workaround wie für die struct
? Oder einen besseren Weg, dies zu tun? (Und nein, ich möchte nicht void
Zeiger verwenden.)
Hilft dies: [STL map auf sich selbst?] (Http://stackoverflow.com/questions/1403501/stl-map-onto-itself) –
Sie können sich die Realisierung von http: //www.boost ansehen. org/doc/libs/1_57_0/boost/variant/recursive_variant.hpp oder http://www.boost.org/doc/libs/1_57_0/boost/variant/recursive_wrapper.hpp – ForEveR
Ihr erster Fall ist kein Problem in C++ : 'struct node_t {node_t * left 'node_t * rechts; }; 'ist völlig in Ordnung. Außerdem ist "std :: pair" kein Container. – juanchopanza