multiple defenition - richtige Header Kombination
-
Hey,
ich habe derzeit ein kleines Problem. Ich arbeite immoment an einer Komponentenlibrary auf Basis der WinAPI, daraus folgen viele verschiedene Header, die sich gegenseitig inkludieren. Das Hauptproblem sind meine Basis Header. In ihnen sind Funktionen wie IntToString oder vordefinierte Structs. Durch dieses Einbinden habe ich jetzt viele Fehler vor allem wegen den Funktionen. Inline machen löst das Problem, aber gibt es da keine bessere Möglichkeit?
danke!
-
Frolo schrieb:
[...] gibt es da keine bessere Möglichkeit?
Den Kram nicht im Header definieren?

-
Du solltest deine Dateihierarchy baumartig aufbauen, und damit nach Möglichkeit ohne Zyklen/Kreise.
Wenn du das dann doch mal hast, dann nutze Forwarddeklarationen.
In deinem Fall hört sich das etwas strange an. So eien Reihe Standardfunktionen wie Int2Str oder so, klar, die braucht man immer wieder und überall. Aber eigentlich nur in der Implementierung, sprich in den cpp Dateien. dann inkludierst du auch nur dort.
Definitionen von structs und classen solltest du wie gesagt nicht zyklisch anhängig haben. Falls doch, dann bezieh dich per Zeiger auf deren Forwarddeclarations in Interfaces/Schnittstellen/Headerdateien und inkludier sie selbst in den cpp Dateien.
Aber wie sehen deine Dateien denn aus und welche Fehler kommen?
-
In Header keine Definitionen, nur Deklarationen, denn so sind Header gedacht. Oder wenn doch dann eben inline, denn dafür ist inline gedacht. Das sind die beiden Methoden und beide sind gut. Inline ist dabei tendenziell für sehr kleine Funktionen gedacht, da es dann manchen Compilern gewisse Optimierungen einfacher macht.