Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi,

ich bin hier etwas am verzweifeln. Ich habe in einem Projekt folgende Dateien:

main.cpp

md5.cpp

main.h

md5.h

in der md5.h steht unter anderem folgendes:


#include <stdio.h>
#include <math.h>
#include <memory.h>
typedef unsigned long ulong;
typedef unsigned char uchar;

// 1..64 ==> [65], constructed from a sine function
// T[i] = (ulong) (4294967296 * abs(sin(i)))
ulong T[65];

ulong hashval[4];

// to initialize A, B, C and D
ulong magic[4] = { 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476 };

struct md5_struc {
ulong A, B, C, D;
ulong X[16];
};

ulong *X;
[/PHP]

Die md5.cpp includiert die md5.h

Die main.h includiert unter anderem die stdio.h

Die main.cpp includiert die main.h und die md5.h

Beim Linken bekomme ich immer die Fehler:

MD5.OBJ : error LNK2005: "unsigned long * magic" (?magic@@3PAKA) bereits in main.obj definiert

MD5.OBJ : error LNK2005: "unsigned long * hashval" (?hashval@@3PAKA) bereits in main.obj definiert

MD5.OBJ : error LNK2005: "unsigned long * X" (?X@@3PAKA) bereits in main.obj definiert

MD5.OBJ : error LNK2005: "unsigned long * T" (?T@@3PAKA) bereits in main.obj definiert

Debug/OU_DLCL.exe : fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden

Fehler beim Ausführen von link.exe.

Wie kann ich das umgehen?:confused:

Gruß

Guybrush

Geschrieben

Ich hab jetzt mal die Zeile

ulong magic[4] = { 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476 };

in die md5.cpp verlagert, was ja auch logisch ist da magic direkt definiert wird.

Jetzt bekomme ich aber immer noch die Fehler das hashval, T und X mehrmals

definiert wären. Diese werden in der md5.h aber doch nur deklariert, sodass das

doch keine Probleme machen dürfte.

:confused: :confused: :confused:

Geschrieben
Original geschrieben von Guybrush Threepwood

Jetzt bekomme ich aber immer noch die Fehler das hashval, T und X mehrmals

definiert wären. Diese werden in der md5.h aber doch nur deklariert, sodass das

doch keine Probleme machen dürfte.

:confused: :confused: :confused:

Nein, diese drei werden definiert. Wenn du diese Headerdatei in mehr als einer Quellcodedatei mit #include einbindest, werden sie mehrfach definiert. Da helfen auch keine #include-Guards (sorry @ Knuddlbaer).

Du könntest die drei in der Headerdatei als extern deklarieren (dann werden sie wirklich nur deklariert), und die Definitionen in eine .cpp-Datei verschieben.

Geschrieben

Also mit extern funktioniert es, DANKE!

Allerdings verstehe ich immer noch nicht warum diese 3 Variablen da definiert werden. Ein Definition wäre es doch nur wenn ich direkt einen Wert zuweise, da ich aber doch nur sage das sie vorhanden sind müßte es doch eine deklaration sein.:confused:

Geschrieben
Original geschrieben von Guybrush Threepwood

Allerdings verstehe ich immer noch nicht warum diese 3 Variablen da definiert werden. Ein Definition wäre es doch nur wenn ich direkt einen Wert zuweise, da ich aber doch nur sage das sie vorhanden sind müßte es doch eine deklaration sein.:confused:

Nein, wenn du einen Wert zuweisen würdest, wäre es eine Definition mit Initialisierung.

Wenn das keine Definition wäre, sondern nur eine Deklaration, wo sind dann diese Variablen definiert? ;)

Geschrieben
Original geschrieben von Klotzkopp

Nein, wenn du einen Wert zuweisen würdest, wäre es eine Definition mit Initialisierung.

Wenn das keine Definition wäre, sondern nur eine Deklaration, wo sind dann diese Variablen definiert? ;)

Hmm...

Irgendwie ist da was dran:)

Danke:uli

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...