error LNK2005: "struct ist bereits definiert", trotz ifndef ??????
-
Hallo! Ich bekomme folgenden Fehler obwohl ich die Headerdatei mit ifndef deklariert habe.
error LNK2005: "struct benutzer * b_anfang" (?b_anfang@@3PAUbenutzer@@A) ist bereits in shopsystem.obj definiert. anmeldung.obj
Weis jemand woran das liegt?
#ifndef BENUTZERSTRUKTUREN_H #define BENUTZERSTRUKTUREN_H #include <stdio.h> struct telefon { char vorwahl[11]; // String mit max 10 Stellen (11Byte) unsigned long nummer; // Int bis 4.294.967.295 (4Byte) }; struct datum { char tag[3]; // String mit max 2 Stellen (3Byte) char monat[3]; // String mit max 2 Stellen (3Byte) unsigned short jahr; // Int bis 65.535 (2Byte) }; struct benutzer { unsigned long benutzernu; // Int bis 4.294.967.295 (4Byte) char nachname[51]; // String mit max 50 Stellen (51Byte) char vorname[51]; // String mit max 50 Stellen (51Byte) char strasse[51]; // String mit max 50 Stellen (51Byte) char nr[6]; // String mit max 5 Stellen (6Byte) char ort[51]; // String mit max 50 Stellen (51Byte) char plz[6]; // String mit max 5 Stellen (6Byte) char land[51]; // String mit max 50 Stellen (51Byte) struct telefon festnetz; struct telefon handy; struct telefon fax; char email[51]; // String mit max 50 Stellen (51Byte) struct datum geburtstag; char passwort[51]; // String mit max 50 Stellen (51Byte) unsigned short admin; // Int bis 65.535 (2Byte) struct benutzer *naechster; }; struct benutzer* b_anfang = NULL; struct benutzer* b_aktuell = NULL; struct benutzer* b_login = NULL; struct benutzer* b_suche = NULL; #endif
-
Du darfst in Header-Dateien Variablen nur deklarieren, nicht definieren. Die Definition steht dann ein einer Source-Datei.
extern struct benutzer* b_anfang; extern struct benutzer* b_aktuell; extern struct benutzer* b_login; extern struct benutzer* b_suche;Du darfst im übrigen Präprozessoranweisungen nicht vor dem # einrücken (laut MSDN).
Und das ist C-Code, nicht C++
-
Danke für die schnelle Antwort, aber leider klappt das noch nicht ganz...

Jetzt meckern die ganzen Funktionen aus benutzerfunktionen.h das b_anfang, b_aktuell usw nicht deklarierte Bezeichner sind...
#include <stdio.h> #include "benutzerfunktionen.h" struct benutzer* b_anfang = NULL; struct benutzer* b_aktuell = NULL; struct benutzer* b_login = NULL; struct benutzer* b_suche = NULL; void main() { ... }#ifndef _BENUTZERFUNKTIONEN_ #define _BENUTZERFUNKTIONEN_ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <ctype.h> #include <conio.h> #include "benutzerstrukturen.h" #include "grafikfunktionen.h" #define TRUE 1 #define FALSE 0 int BenutzerMenue(char *art); int Anmeldung(); int BenutzerEinlesen(char *dateiname); void BenutzerKopieren(struct benutzer *von_person, struct benutzer *nach_person); void BenutzerAnhaengen(struct benutzer *tmp_person); void BenutzerSuchenNummer(unsigned long benutzernu); int BenutzerSuchenLogin(struct benutzer *tmp_person); void AlleBenutzerAusgeben(); void BenutzerFree(); #endif#ifndef BENUTZERSTRUKTUREN_H #define BENUTZERSTRUKTUREN_H #include <stdio.h> struct telefon { char vorwahl[11]; // String mit max 10 Stellen (11Byte) unsigned long nummer; // Int bis 4.294.967.295 (4Byte) }; struct datum { char tag[3]; // String mit max 2 Stellen (3Byte) char monat[3]; // String mit max 2 Stellen (3Byte) unsigned short jahr; // Int bis 65.535 (2Byte) }; struct benutzer { unsigned long benutzernu; // Int bis 4.294.967.295 (4Byte) char nachname[51]; // String mit max 50 Stellen (51Byte) char vorname[51]; // String mit max 50 Stellen (51Byte) char strasse[51]; // String mit max 50 Stellen (51Byte) char nr[6]; // String mit max 5 Stellen (6Byte) char ort[51]; // String mit max 50 Stellen (51Byte) char plz[6]; // String mit max 5 Stellen (6Byte) char land[51]; // String mit max 50 Stellen (51Byte) struct telefon festnetz; struct telefon handy; struct telefon fax; char email[51]; // String mit max 50 Stellen (51Byte) struct datum geburtstag; char passwort[51]; // String mit max 50 Stellen (51Byte) unsigned short admin; // Int bis 65.535 (2Byte) struct benutzer *naechster; }; #endif
-
Neku schrieb:
extern struct benutzer* b_anfang; extern struct benutzer* b_aktuell; extern struct benutzer* b_login; extern struct benutzer* b_suche;Der Teil muss in der Header-Datei, um die Variablen nur zu deklarieren.
-
Hab ich gemacht... aber nun meckert er wegen Mehrfachinitialisierung! Ich verstehe das nicht

error C2374: 'b_anfang': Neudefinition; Mehrfachinitialisierung
error C2374: 'b_aktuell': Neudefinition; Mehrfachinitialisierung
error C2374: 'b_login': Neudefinition; Mehrfachinitialisierung
error C2374: 'b_suche': Neudefinition; Mehrfachinitialisierung#include <stdio.h> #include "benutzerfunktionen.h" struct benutzer* b_anfang = NULL; struct benutzer* b_aktuell = NULL; struct benutzer* b_login = NULL; struct benutzer* b_suche = NULL; void main() { ... }#ifndef BENUTZERSTRUKTUREN_H #define BENUTZERSTRUKTUREN_H #include <stdio.h> struct telefon { char vorwahl[11]; // String mit max 10 Stellen (11Byte) unsigned long nummer; // Int bis 4.294.967.295 (4Byte) }; struct datum { char tag[3]; // String mit max 2 Stellen (3Byte) char monat[3]; // String mit max 2 Stellen (3Byte) unsigned short jahr; // Int bis 65.535 (2Byte) }; struct benutzer { unsigned long benutzernu; // Int bis 4.294.967.295 (4Byte) char nachname[51]; // String mit max 50 Stellen (51Byte) char vorname[51]; // String mit max 50 Stellen (51Byte) char strasse[51]; // String mit max 50 Stellen (51Byte) char nr[6]; // String mit max 5 Stellen (6Byte) char ort[51]; // String mit max 50 Stellen (51Byte) char plz[6]; // String mit max 5 Stellen (6Byte) char land[51]; // String mit max 50 Stellen (51Byte) struct telefon festnetz; struct telefon handy; struct telefon fax; char email[51]; // String mit max 50 Stellen (51Byte) struct datum geburtstag; char passwort[51]; // String mit max 50 Stellen (51Byte) unsigned short admin; // Int bis 65.535 (2Byte) struct benutzer *naechster; }; extern struct benutzer* b_anfang = NULL; extern struct benutzer* b_aktuell = NULL; extern struct benutzer* b_login = NULL; extern struct benutzer* b_suche = NULL; #endif
-
Dann such mal den Unterschied zwischen Neku's extern-Deklarationen und Deinen...
-
Danke Euch beide... da hab ich gesucht und gefunden!
