[C++] Dateien einbinden, aber wie?

  • Ersteller Ersteller NeoXpert
  • Erstellt am Erstellt am
N

NeoXpert

Gast
Hi,

ich hab da ein kleines Problem und irgendwie bin ich zu "doof" eine Lösung dafür zu finden. Also ich habe meine "main.cpp", eine "parser.hpp" und eine "datentypen.hpp". Nun binde ich in die "main.cpp" die "datentypen.hpp" ein. In der befindet sich ein datentyp, den ich in der main brauche und auch in der "parser.hpp", eigentlich müsste die "parser.hpp" das jetzt kennen, dem ist aber nicht so - meckert mir an er kennt den Datentyp nicht den ich benutze ; ). Binde ich jetzt in die "parser.hpp" auch die "datentypen.hpp" ein bekomme ich das Problem der neu Definition - ich kenne mich mit dem Präprozessor so gut wie gar nicht aus und das googlen hat mir keine verstänliche Lösung gebracht : (. Weiß hier vielleicht jemand, wie ich das Problem gelöst bekomme?

mfg Neoxpert
 
in jede header-datei gehören die von boron angesprochen include-guards, die sehen bspw so aus:
Code:
#ifndef _DATEINAME_H_
#define _DATEINAME_H_
.... dein eigentlicher header
#endif
die guards sollte man a) großschreiben und b) so bezeichnen, dass sie nicht mit anderen präprozessordirektiven kollidieren. will heißen: PI ist bspw eine saudummer guard für einen header.
daher bietet sich ein schema a la DATEINAME_H, _DATEINAME_H, _DATEINAME_H_ oder _DATEINAME_ an. natürlich auch mit HPP statt H.
 
Noch etwas dazu...

Alle Bezeichner die mit einem Unterstrich gefolgt von einem Großbuchstaben beginnen, sind für den Compiler und seine Implementierung reserviert und sollten niemals verwendet werden; egal ob für den Präprozessor, Variablennamen, Typnamen, etc. . Eine Warnung ist nicht vorgeschrieben. (_DATEINAME_H, _DATEINAME_H_ oder _DATEINAME_ wären z.B. unzulässige Namen, DATEINAME_H ist aber okay)

Das selbe gilt für alle Namen, die zwei Unterstriche hinterainder enthalten; egal wo im Namen.

Ebenso dürfen keine Namen im globalen Namespace definiert werden, die mit einem Unterstrich beginnen.

Zum Nachlesen (C++ Standard Final Draft):
http://www.kuzbass.ru:8086/docs/isocpp/lib-intro.html#lib.global.names
 
Zuletzt bearbeitet:
hey danke, das kannte ich bisher nicht. ich werde mich in zukunft daran halten.
 
Zurück
Oben