Frage

Ich habe eine Header-Datei port.h, port.c, und mein main.c

Ich erhalte die folgende Fehlermeldung: 'Häfen' Verwendungen undefined Struktur 'port_t'

dachte ich, als ich die Struktur in meiner .h-Datei erklärt habe und in der C-Datei die tatsächliche Struktur war in Ordnung.

Ich muss die Vorwärts-Erklärung haben, wie ich einige Daten in meiner port.c Datei ausblenden möchten.

In meinem port.h habe ich folgendes:

/* port.h */
struct port_t;

port.c:

/* port.c */
#include "port.h"
struct port_t
{
    unsigned int port_id;
    char name;
};

main.c:

/* main.c */
#include <stdio.h>
#include "port.h"

int main(void)
{
struct port_t ports;

return 0;
}

Vielen Dank für Ihre Anregungen,

War es hilfreich?

Lösung

Leider muss der Compiler die Größe port_t (in Bytes) wissen, während main.c kompiliert, so müssen Sie die vollständige Typdefinition in der Header-Datei.

Andere Tipps

Wenn Sie die internen Daten der port_t Struktur verbergen möchten, können Sie eine Technik, wie verwenden wie die Standardbibliothek FILE Objekte behandelt. Client-Code befasst sich nur mit FILE* Artikel, so brauchen sie nicht (in der Tat, dann kann in der Regel nicht) haben keine Kenntnissen auf, was tatsächlich in der FILE Struktur. Der Nachteil dieser Methode ist, dass der Client-Code kann eine Variable nicht einfach erklären dieser Art zu sein - sie nur Zeiger auf sie haben kann, so das Objekt erstellt werden muss, und zerstört eine API verwenden, und alle Verwendungen des Objekts haben durch einige API sein.

Der Vorteil hierbei ist, dass Sie eine schöne saubere Schnittstelle zu haben, wie port_t Objekte verwendet werden müssen, und können Sie private Dinge privat halten (nicht-private Dinge brauchen Getter / Setter-Funktionen für den Client auf sie zuzugreifen).

Genau wie wie FILE I / O in der C-Bibliothek behandelt wird.

Eine gemeinsame Lösung, die ich benutze:

/* port.h */
typedef struct port_t *port_p;

/* port.c */
#include "port.h"
struct port_t
{
    unsigned int port_id;
    char name;
};

Sie verwenden die port_p in Funktion Schnittstellen. Sie benötigen spezielle malloc (und kostenlos) Wrapper in port.h erstellen als auch:

port_p portAlloc(/*perhaps some initialisation args */);
portFree(port_p);

Ich würde eine andere Art und Weise empfehlen:

/* port.h */
#ifndef _PORT_H
#define _PORT_H
typedef struct /* Define the struct in the header */
{
    unsigned int port_id;
    char name;
}port_t;
void store_port_t(port_t);/*Prototype*/
#endif

/* port.c */
#include "port.h"
static port_t my_hidden_port; /* Here you can hide whatever you want */
void store_port_t(port_t hide_this)
{
    my_hidden_port = hide_this;
}

/* main.c */
#include <stdio.h>
#include "port.h"
int main(void)
{
    struct port_t ports;
    /* Hide the data with next function*/
    store_port_t(ports);
    return 0;
}

Es ist im Allgemeinen keine guten Variablen in einer Header-Datei definiert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top