DevC++: include -> multiple definition
-
Hi!
Ich benutze DevC++ und bekomme bei folgendem kleinen Beispielprogramm den Compilierfehler multiple definition of 'fck(int)':test.cpp:
#include<iostream> #include "inc.cpp" int main(){ std::cout << fck(3); system("Pause"); }
inc.cpp:
int fck(int x){ return 2*x; }
Liegt bestimmt an DevC++, dass der das nicht peilt. Hab das ganz normal über ein Empty Project gemacht.
Hoffe ihr könnt mich retten!Bis denn,
Helgefan
-
Du brauchst ne header-Datei:
#ifndef FCK_HEADER #define FCK_HEADER int fck(int); #endif
Includiere diese Datei in inc.cpp und in test.cpp statt "inc.cpp".
-
ums generell aus zu drucken:
bei headern schreibt man a anfang (ersten 2 zeilen)#ifndef HEADERFILENAME_H #define HEADERFILENAME_H
dann kommt der Code
... //CODE ...
und die letzte zeile sieht so aus:
#endif
Dies verhindert mehrfachdeklaration einer funktion.
(Ausserdem is dies hier das Falsche Forum...eines oder zwei weiter unten wär
richtig)
Mfg Shade37337
-
Wow, danke!
Jetzt klappts (wer hätte das gedacht?). Alle sagen immer, dass include einfach den entsprechenden Quellcode 1 zu 1 an die Stelle wo #include steht hinkopiert, was ja scheinbar bei meinem Beispiel nicht so ganz hingehauen hat.
Weiß jemand, warum der bei meinem Beispiel multiple definition von fck gemeldet hat, selbst wenn ich die inc.cpp so umschreibe:#ifndef FCK_HEADER #define FCK_HEADER int fck(int x){ return 2*x; } #endif
Wie soll da denn noch fck mehrfach deklariert werden?
Das mit dem falschen Forum tut mir leid. Hatte schon vermutet, dass das mit DevC++ zusammenhängt, da das ganze merkwürdigerweise funktioniert, wenn ich es nicht in einem DevC++-Projekt mache.
Naja, wahrscheinlich wärs trotzdem das falsche Forum *gg*.Bis denn,
Helgefan
-
Helgefan schrieb:
Jetzt klappts (wer hätte das gedacht?
).
Wie sagt man so schön: Kaum macht man's richtig, funktioniert's!
Alle sagen immer, dass include einfach den entsprechenden Quellcode 1 zu 1 an die Stelle wo #include steht hinkopiert, was ja scheinbar bei meinem Beispiel nicht so ganz hingehauen hat.
Doch, hat es.
Weiß jemand, warum der bei meinem Beispiel multiple definition von fck gemeldet hat, selbst wenn ich die inc.cpp so umschreibe:
Vermutlich, weil die inc.cpp auch Bestandteil des Projekts ist. Darum hat die IDE diese Datei, wie es sich gehört, auch durch den Compiler gejagt. Und am Ende hat der Linker zwei Definitionen für die Funktion gefunden.
Includewächter schützen dich nur vor mehrfachen Includes in einer Übersetzungseinheit.Hatte schon vermutet, dass das mit DevC++ zusammenhängt, da das ganze merkwürdigerweise funktioniert, wenn ich es nicht in einem DevC++-Projekt mache.
Vermutlich, weil du inc.cpp nicht compiliert und dazugelinkt hast. Da haben sich dann eher zwei Fehler (Fehlende Objektdatei und cpp-Include) gegenseitig aufgehoben.
-
Ach so!
Jetzt habichs denke ich kapiert.
Danke!
Tschüss!