dereferencing pointer to incomplete type
-
Hallo,
ich möchte versuchen eine art "Objektorientierung" in c zu machen. Allerdings habe ich dabei ein kleines Problem.
Ich habe folgende Dateien implementiert:
datei file.c
#include "stdlib.h" #include "file.h" /* aus Descriptor.c */ struct _StdFile { int (*read)(StdFile *this, void* b, int ml); int (*write)(StdFile *this, void *b, int l); int (*close)(StdFile *this); FILE *fp; }; static int stdfile_read(StdFile *this, void *buffer, int maxlen) { return fread(buffer, maxlen, 1, this->fp); } static int stdfile_write(StdFile *this, void *buffer, int len) { return fwrite(buffer, len, 1, this->fp); } static int stdfile_close(StdFile *this) { fclose(this->fp); free(this); return 1; } StdFile* stdfile_open(const char *path, const char* mode) { StdFile *n; FILE *fp = fopen(path, mode); if (fp == NULL) return NULL; n = malloc(sizeof *n); n->read = stdfile_read; n->write = stdfile_write; n->close = stdfile_close; n->fp = fp; return n; }
Datei file.h
#include <stdio.h> #ifndef _FILE_H_ #define _FILE_H_ /* opaque objects */ typedef struct _StdFile StdFile; /* constructor prototypes */ StdFile* stdfile_open(const char *path, const char* mode); #endif
Und ich verwende das ganze im main.c so:
#include "stdio.h" #include "file.h" int main() { StdFile *datei; int test; datei = stdfile_open("./test.txt","w"); test = datei->write(datei,"test",5); return 0; }
soweit so gut. Allerdings kriege ich sobald ich die Zeile
test = datei->write(datei,"test",5);
einfüge folgenden Fehler :
error:dereferencing pointer to incomplete typeHat jemand eine Ahnung was das heisst ?
-
Das heisst, dass die main-Funktion nicht weiss, wie StdFile aussieht, weil es zwar deklariert aber nicht definiert wurde.
-
Argh, das hatte ich glatt übersehen.
Danke