Problem mit #include, "Class bereits definiert"
-
Ich habe ein komisches Problem:
Ich habe in meinem Projekt eine "Functions.h", welche ich für allerhand selbstgeschriebene Functionen nutzen möchte, die ich überall im Prog gebrauchen kann.
Ich habe sie per #include "Functions.h" in die stdafx.h eingefügt.Mein Problem ist nun, wenn ich das Programm kompilieren möchte, kommt der Fehler:
1>Card.obj : error LNK2005: "class System::String ^ __clrcall IntToStr(int)" (?IntToStr@@$$FYMPAAVString@System@@H@Z) ist bereits in Black Jack.obj definiert. 1>stdafx.obj : error LNK2005: "class System::String ^ __clrcall IntToStr(int)" (?IntToStr@@AAVString@System@@H@Z) ist bereits in Black Jack.obj definiert.
1>D:\Eigene Dateien\Dokumente\Visual Studio 2008\Black Jack 2\Black Jack\Debug\Black Jack.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.Überall, wo ich auf eine Funktion aus meiner Functions.h zugreifen möchte, wird ein solcher Fehler erzeugt.
Stell ich mich irgendwie zu doof dabei an, eine Funktion aufzurufen? 
Selbst diese kleine Code erzeugt den oben beschriebenen Fehler:
//Bank.cpp #pragma once #include "stdafx.h" void tester() { System::String^ test=IntToStr(8); }1>Bank.obj : error LNK2005: "class System::String ^ __clrcall IntToStr(int)" (?IntToStr@@$$FYMP$AAVString@System@@H@Z) ist bereits in Black Jack.obj definiert.Ich habe eine Weile nicht mit C++ gearbeitet (nutze VC++ 2008 von MS). Kann mir jemand sagen, was ich falsch mache?
Mich verwirrt auch, wieso dieser Fehler auch für die stdafx.h angezeigt wird? Dabei rufe ich dort überhaupt keine Funktionen auf!
-
Anscheinend habe ich ein generelles Problem bei Funktionsaufrufen..

Ich habe einfach mal meine Functions.h um diese sinnlose Funktion erweitert:
int EinTest(int gg=4) { gg++; return gg; }Wenn ich jetzt iiirrrgendwo "EinTest" verwenden will, taucht sofort wieder die Fehlermeldung auf!

//Test.cpp #pragma once #include "stdafx.h" void tester() { int k = EinTest(8); }1>Test.obj : error LNK2005: "int __clrcall EinTest(int)" (?EinTest@@$$FYMHH@Z) ist bereits in stdafx.obj definiert.Was ist denn da los?? -.-
Die stdafx.h nicht einzubinden geht ja leider nicht, da er dann ebenso meckert.
-
GR-Thunderstorm schrieb:
Ich habe eine Weile nicht mit C++ gearbeitet (nutze VC++ 2008 von MS). Kann mir jemand sagen, was ich falsch mache?
Vor allem postest du im falschen Forum.
-
Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL (C++ Builder) in das Forum MFC (Visual C++) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Du darfst Header nicht dopelt einfügen. Funktionen dürfen mehrfach dekalriert aber nur einmal definiert werden.
Wenn Du eine Funktion in der function.h definierst, dann ist der Fehler klar.
Entweder die Funktion in eine cpp Datei rein, oder als inline definieren. Letzteres macht nicht immer Sinn.
Dir ist hoffentlich der Unterschied zwischen Definition und Deklaration klar?
-
Martin Richter schrieb:
Dir ist hoffentlich der Unterschied zwischen Definition und Deklaration klar?
Wenn du so genau fragst, wüsste ich grade nicht, was genau der Unterschied ist.

Ich habe schon mehrere komponentenspezifische Funktionen selbst geschrieben, mit welchen es seltsamer Weise keine Probleme gibt.
Allerdings stehen diese nicht in der Functions.h sondern im jeweiligen Header, wo auch alle sonstigen Infos zu der Klasse stehen.
-
Das ist eine Definition, so was darf höchstens in einer Klasse oder als inline im Header stehen.
void tester() { int k = EinTest(8); }Das ist eine Deklaration:
void tester();Klassen dürfen nur einmal definiert werden!
Funktionen die nicht inline sind und auch keine Memberfunktionen sind dito.
-
Martin Richter schrieb:
Das ist eine Definition, so was darf höchstens in einer Klasse oder als inline im Header stehen.
void tester() { int k = EinTest(8); }Das ist eine Deklaration:
void tester();Klassen dürfen nur einmal definiert werden!
Funktionen die nicht inline sind und auch keine Memberfunktionen sind dito.Ich weiß jetzt, was du meinst. So hab ichs auch bei den Funktionen für die einzelnen Klassen gemacht. Irgendwie hab ich dann aber nich dran gedacht in diesem Fall.
Jetzt klappt alles. ^^