Mehrfach Defintionen von Header
-
hallo,
ich nutze MSVC und habe einen header in dem sich die definitionen befinden, also keine cpp Datei vorhanden ist. der grund dafür ist das der header mehrfach in verschiedenen projekten genutzt wird und ich dort keine cpp dateien den projekten hinzufügen möchte. bisher war das auch kein problem da es in den anderen projekten auch nur eine cpp/h vorhanden war.
jetzt muss ich aber diesen header in einen anderen header einfügen der von einer cpp verwendet wird. dieser header der von der cpp verwendet wird, wird leider auch in 2 anderen cpps verwendet was zur folge hat das es zu mehrfach definitionen kommt.
kann man das irgendwie hinbiegen das die definitionen nur in einer *.obj landen und in den anderen nicht trotz der einfügung in andere cpp dateien? ich könnte zwar den weg mit einer statischen library gehen aber schön find ich das auch nicht weil unbequem.
-
Stichwort: Includeguards.
#ifndef MY_HEADER_FILE #define MY_HEADER_FILE //gesamter Header hier #endifDann gibt es noch pragma once:
#pragma once //rest hierOder am besten beides zusammen:
#ifndef MY_CLASS_NAME_H #define MY_CLASS_NAME_H #if defined _MSC_VER && _MSC_VER >= 1020 #pragma once #endif ... #endif
-
http://www.amazon.de/C-Kochbuch-D-Ryan-Stephens/dp/3897214474
Siehe Seite 119Wenn keine dringende Notwendigkeit besteht, sollte man nach meinem "Gusto" auf Hardware, Betriebssystem oder Compilierspezifische "Vorteile" verzichten. In Deinem Fall also compilerspezifische Visual C++ #pragmas nicht verwenden.
-
ein include guard funktioniert hier leider nicht. es sind in der summe drei cpp dateien die diesen header bekommen und daraus werden drei obj dateien die dann die definitionen bekommen woraus dann die 3 fache definition ensteht was im ganze nicht funktioniert.
-
In einem Header sollten auch keine Definitionen vorhanden sein, sondern Deklarationen. Ausnahme sind Inline-Funktionen, die werden aber auch intern gelinkt, stellen also kein Problem dar.
-
Belli schrieb:
In einem Header sollten auch keine Definitionen vorhanden sein, sondern Deklarationen. Ausnahme sind Inline-Funktionen, die werden aber auch intern gelinkt, stellen also kein Problem dar.
Oder man verwendet
externfür Variablen und definiert sie in nur einem *.cpp File.
Allerdings im allgemeinen äusserst unschön
Grüssli