Irgendeiner Weise in C, um vorwärts zu deklarieren struct in header ohne Zeiger, die in anderen Dateien?

Denke, ich habe dies in der Liste.h:

typedef struct list_t list_t;
typedef struct list_iter_t list_iter_t;
list_iter_t iterator(list_t *list);

dann definieren Sie in der Liste.c:

typedef struct node_t {
    ...
} node_t;

struct list_iter_t {
    node_t *current;
    //this contains info on whether the iterator has reached the end, etc.
    char danger;
};

struct list_t {
    ...
}

list_iter_t iterator(list_t *list) {
    list_iter_t iter;
    ...
    return iter;
}

Gibt es irgendetwas, was ich tun kann, abgesehen von einschließlich der struct-Deklaration in der header-Datei, so dass in einigen Datei testen.c ich kann:

#include "list.h"

void foo(list_t *list) {
    list_iter_t = iterator(list);
    ...
}

Möchte vielleicht sagen, der compiler die Größe des Speichers von list_iter_t irgendwie? Es unbequem zu haben, um mit einem Zeiger (nicht weil es ein Zeiger, aber aus anderen Gründen), aber zur gleichen Zeit ich möchte zu verstecken die details der Implementierung, so viel wie möglich.

  • Werden Sie gefragt, ob Sie erklären können, variable, deren Typ ist unvollständig? Das können Sie nicht.
  • Nein gibt es nicht. Sie können nicht erklären, ein unvollständiger Typ ist. Auch deine typedefs sind falsch. Sie sollten typedef struct list_t list_t; typedef struct list_iter_t list_iter_t;. Denken Sie an es auf diese Weise, wenn was Sie sich wünschen möglich wäre, würde es keine solche Sache wie ein opaker Typ in C. Jemand versucht zu verbergen das Innenleben einer struct von Ihnen, indem wir Ihnen nur einen header mit einer forward-Deklaration und eine Bibliothek, die zusammen mit ihm geht, könnten Sie einfach deklarieren Sie eine Instanz in Ihrem code und verwenden Sie es.
  • Okay danke. (Das fehlen von "struct" in die typedef-war ein Tippfehler.)
InformationsquelleAutor Nick | 2011-09-02
Schreibe einen Kommentar