Guybrush Threepwood Geschrieben 21. Oktober 2003 Geschrieben 21. Oktober 2003 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 Zitieren
Guybrush Threepwood Geschrieben 21. Oktober 2003 Autor Geschrieben 21. Oktober 2003 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: Zitieren
Knuddlbaer Geschrieben 21. Oktober 2003 Geschrieben 21. Oktober 2003 Bau mal includewächter ein: #ifndef header_md5 #define header_md5 // Kein Krempel #endif Alternativ wenn Du einen VC Compiler hast #pragma once Ist aber NICHT portabel dann. Zitieren
Klotzkopp Geschrieben 22. Oktober 2003 Geschrieben 22. Oktober 2003 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. Zitieren
Guybrush Threepwood Geschrieben 22. Oktober 2003 Autor Geschrieben 22. Oktober 2003 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: Zitieren
Klotzkopp Geschrieben 22. Oktober 2003 Geschrieben 22. Oktober 2003 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? Zitieren
Guybrush Threepwood Geschrieben 22. Oktober 2003 Autor Geschrieben 22. Oktober 2003 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 Zitieren
Guybrush Threepwood Geschrieben 23. Oktober 2003 Autor Geschrieben 23. Oktober 2003 Hab doch noch ne Frage:floet: Wie schaut das denn dann bei Funktionen aus? Ist folgendes eine Definition oder Deklaration? int test(char*); [/PHP] Zitieren
Klotzkopp Geschrieben 23. Oktober 2003 Geschrieben 23. Oktober 2003 Das ist eine Deklaration. Wenn der Funktionskörper dabei stehen würde, wäre es eine Definition. Zitieren
Guybrush Threepwood Geschrieben 23. Oktober 2003 Autor Geschrieben 23. Oktober 2003 Ok danke:) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.