Header einbinden
-
Keiner ein Vorschlag?
-
Hab das gleiche Problem.
Hast Du schon eine Lösung gefunden Sander?
Es ist nicht möglich eine Header in zwei Formen einzubinden.
Kann mir jemand helfen?Gruß
-
Seit wann implementiert man *Funktionen* in einem Header? Mach die Deklaration in dem Header und implementiere sie in einer CPP-Datei.
-
Habe jetzt die Funktionen in eine Klasse gepackt, nun funzt es.
Ich weiß aber nicht, ob das so gemacht wird!?
Das Einbinden der cpp Datei hat die gleiche Fehlermeldung gebracht.Meine test.h
#pragma once using namespace System; using namespace System::Windows::Forms; using namespace System::Drawing; using namespace testBeispiel; ref class Dialoge { public: static String^ _open(String^ _Title,String^ _Filter) { OpenFileDialog^ _openDialog = gcnew OpenFileDialog(); _openDialog->Title::set(_Title); _openDialog->Filter::set(_Filter); _openDialog->ShowDialog(); return _openDialog->FileName; } static String^ _save(String^ _Titel, String^ _Filter) { SaveFileDialog^ _saveFile = gcnew SaveFileDialog(); _saveFile->Title::set(_Titel); _saveFile->Filter::set(_Filter); _saveFile->ShowDialog(); return _saveFile->FileName; } static Color _color(Color _setColor, bool _full) { ColorDialog^ _colorDialog = gcnew ColorDialog(); _colorDialog->FullOpen::set(_full); _colorDialog->Color::set(_setColor); _colorDialog->ShowDialog(); return _colorDialog->Color; } static Font^ _font(Font^ _FontGet, bool _FontMustExist, bool _ShowColor, int _MinSize, int _MaxSize) { FontDialog^ _fontDialog = gcnew FontDialog(); _fontDialog->Font::set(_FontGet); _fontDialog->FontMustExist::set(_FontMustExist); _fontDialog->ShowColor::set(_ShowColor); _fontDialog->MinSize::set(_MinSize); _fontDialog->MaxSize::set(_MaxSize); _fontDialog->ShowDialog(); return _fontDialog->Font; } };
-
Mehren schrieb:
Das Einbinden der cpp Datei hat die gleiche Fehlermeldung gebracht.
Meinst du einbinden per #include? Man inkludiert keine cpp-Dateien! Du packst deine Klassendefinitionen und Prototypen in einen Header, die eigentliche Implementation geschieht dann aber in einer cpp-Datei. Die fügst du deinem Projekt hinzu (so dass die Implementation nur einmal kompiliert wird), und überall wo du deine Klassen/Funktionen aus dieser cpp-Datei benutzen willst, inkludierst du den Header.
-
Hallo _matze,
danke für die Antwort, aber das verstehe ich nicht so ganz.
Ich lege zum Beispiel eine test.h und eine test.cpp an.
Die test.h sieht so aus...#pragma once using namespace System; using namespace System::Windows::Forms; using namespace System::Drawing; using namespace testBeispiel;
Und der Rest kommt in die cpp?
using namespace testBeispiel; ref class Dialoge { public: static Color _color(Color _setColor, bool _full) { ColorDialog^ _colorDialog = gcnew ColorDialog(); _colorDialog->FullOpen::set(_full); _colorDialog->Color::set(_setColor); _colorDialog->ShowDialog(); return _colorDialog->Color; } static Font^ _font(Font^ _FontGet, bool _FontMustExist, bool _ShowColor, int _MinSize, int _MaxSize) { FontDialog^ _fontDialog = gcnew FontDialog(); _fontDialog->Font::set(_FontGet); _fontDialog->FontMustExist::set(_FontMustExist); _fontDialog->ShowColor::set(_ShowColor); _fontDialog->MinSize::set(_MinSize); _fontDialog->MaxSize::set(_MaxSize); _fontDialog->ShowDialog(); return _fontDialog->Font; } };
Richtig?
Aber wie mache ich die cpp in der Header bekannt, damit beide auch eingebunden werden?
Gruß
-
Ist noch nicht ganz richtig:
In die Header Datei gehört noch die Klassendefinition und Protytpen der Methoden.
für den Besipsiel sähe die Headerdatei folgendermaßen aus:
#pragma once using namespace System; using namespace System::Windows::Forms; using namespace System::Drawing; namespace testBeispiel { ref class Dialoge { public: static Color _color(Color _setColor, bool _full); static Font^ _font(Font^ _FontGet, bool _FontMustExist, bool _ShowColor, int _MinSize, int _MaxSize) }; }
In deiner Quelltext-Datei inkludierst du dann noch diese Header-Datei.
Mehern schrieb:
Aber wie mache ich die cpp in der Header bekannt, damit beide auch eingebunden werden?
Gar nicht Quelltextdateien werden NIE irgendwo inkludiert.
Das zusammensuchen der Klassendefinitionen und Prototypen macht der Linker von ganz alleine.
Du musst nur in den Quelltextdateien wo du die definierten Klassen / Methoden nutzen willst die entsprechende Header-Datei inkludieren.MfG
Marco
-
Danke Marco es funzt.
Aber was ist jetzt der Vorteil?
Warum macht man das so?Musste den Code noch etwas angleichen...
Mit...
namespace Name { }
hatte ich über 213 Fehler gehabt.
Mit...
using namespace Name;
...geht's
-
Man macht sowas um z.B. Klassen nach Themen sortiert in unterschiedliche Dateien zu packen.
So kann man z.B. eine Quelltextdatei nehmen um eine Benutzeroberfläche zu erzeugen, und eine andere um auf Aktivitäten des Benutzers zu reagieren.
Würde man sowas nicht machen, bekänme man sehr lange Quelltextdateien. Sowas ist dann ziemlich unübersichtlich wenn etwas bestimmtes gesucht wird.
MfG
Marco
-
Danke für die Antwort und die Hilfe.
Das leuchtet sogar mir ein lolthx