Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

  • Autor

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:

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.

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.

  • Autor

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:

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? ;)

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.