[MVS2005] Linker Fehler LNK2005

Andrej Dyck

Mitglied
Hallo zusammen,
Ich bin mit meinem latein am ende ^^. Hoffe ihr könnt mir helfen. Hab auch schon in Foren gesucht, Microsoft Hilfe benutzt und es haben auch viele diesen Fehler. Eigentlich versteh ich was Fehler bedeuten, aber bei Linkerfehlern bin ich überfragt. Die Beschreibung des Fehlers (http://support.microsoft.com/default.aspx?scid=kb;en-us;q148652) hilft auch nicht viel.
Also, Ich benutze Microsoft Visual Studio 2005 (C++). Ein CLR-Konsolen-Projekt.

Hier Ausschnitte aus meinem Code (in der main() steht noch nichts):
Code:
//CbwLicence.h-------------------------------------------------------------------------

#ifndef _CbwLicence_
#define _CbwLicence_

#include <vcclr.h>
#include <stdlib.h>

using namespace System;

#include "CKeyINI.h"
#include "NumberSystem34.h"
#include "Crypt.h"

class CbwLicence
{
 // [..]
};

#endif


//NumberSystem34.h-------------------------------------------------------------------------

#ifndef _NumberSystem34_
#define _NumberSystem34_

#define _BASE 34

#include <math.h>
using namespace System;

namespace NumberSystem34
{
  // [..]
}

#endif


//Crypt.h-------------------------------------------------------------------------

#ifndef _Crypt_
#define _Crypt_

using namespace System;
using namespace System::Security::Cryptography; 
using namespace System::Text;

namespace Crypt
{
 // [..]
}

#endif


Und das ist dan die Meldung vom Linker:
Code:
Kompilieren...
CbwLicence.cpp
Verknüpfen...
CKeyINI.obj : error LNK2005: "class System::String ^ __clrcall Crypt::ByteArrayToString(cli::array<unsigned char >^)" (?ByteArrayToString@Crypt@@YMP$AAVString@System@@P$01AE@Z) ist bereits in CbwLicence.obj definiert.
CKeyINI.obj : error LNK2005: "class System::String ^ __clrcall Crypt::md5(class System::String ^)" (?md5@Crypt@@YMP$AAVString@System@@P$AAV23@@Z) ist bereits in CbwLicence.obj definiert.
CKeyINI.obj : error LNK2005: "class System::String ^ __clrcall Crypt::sha1(class System::String ^)" (?sha1@Crypt@@YMP$AAVString@System@@P$AAV23@@Z) ist bereits in CbwLicence.obj definiert.
CKeyINI.obj : error LNK2005: "class System::String ^ __clrcall Crypt::sha256(class System::String ^)" (?sha256@Crypt@@YMP$AAVString@System@@P$AAV23@@Z) ist bereits in CbwLicence.obj definiert.
CKeyINI.obj : error LNK2005: "class System::String ^ __clrcall Crypt::ByteArrayToString(cli::array<unsigned char >^)" (?ByteArrayToString@Crypt@@$$FYMP$AAVString@System@@P$01AE@Z) ist bereits in CbwLicence.obj definiert.
CKeyINI.obj : error LNK2005: "class System::String ^ __clrcall Crypt::md5(class System::String ^)" (?md5@Crypt@@$$FYMP$AAVString@System@@P$AAV23@@Z) ist bereits in CbwLicence.obj definiert.
CKeyINI.obj : error LNK2005: "class System::String ^ __clrcall Crypt::sha1(class System::String ^)" (?sha1@Crypt@@$$FYMP$AAVString@System@@P$AAV23@@Z) ist bereits in CbwLicence.obj definiert.
CKeyINI.obj : error LNK2005: "class System::String ^ __clrcall Crypt::sha256(class System::String ^)" (?sha256@Crypt@@$$FYMP$AAVString@System@@P$AAV23@@Z) ist bereits in CbwLicence.obj definiert.
D:\Projects\bwLicence\test_CbwLicence\Debug\test_CbwLicence.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.

Ich hoffe ihr könnt mir helfen.

Gruß Andrej

p.s. ahja, ich binde ja noch ne klasse CKeyINI ein. also über die klasse mekert er nicht. nur über die namespaces bzw. auch wenn ich die Funktionen nicht in das namespace packe kommt der Fehler.
Und wenn ich ein anderes clr-projekt erstelle und nur eines/beide namespaces direkt in die Hauptdatei einbinde und in der main() benutze, dann klappts auch einwandfrei
 
Zuletzt bearbeitet:
Ok, ich habe das Problem gelöst. Was es war? Also:
Ich habe die Funktionen in der .h Datei Deklariert und Definiert.

z.b.
Code:
/* .h */

namespace Crypt
{
  String^ md5(String^szStr)
  {
    /* [..] */
  }
}

das mochte der MVS nicht. Hab vorher mit Borland (da gings) gearbeitet und das auch früher so gemacht, deshalb wusste ich nicht, weshalb der Linkerfehler überhupt kam.

Lösung:
Code:
/* .h */

namespace Crypt
{
  String^ md5(String^szStr);
}

/* .cpp */

#include "Crypt.h"
String^ Crypt::md5(String^szStr)
  {
    /* [..] */
  }

MfG Andrej

P.S. Quit
 
Zurück