Datenmodul: Richtige Einbindung in die Form
-
Hey,
habe vorher mit Datenmodulen in Delphi gearbeitet. Sobald ich die Unit in die uses-Klausel geschrieben hab (wie in C++ include) konnte ich auf die enthaltenen Objekte direkt zugreifen. In C++ muss ich immer noch den Namen des Datenmoduls davor schreiben:
//... uses unit_with_datamodul; //... Objekt1.Funktion();
//... #include <unit_with_datamodul.h> //... datamodul1->Objekt1->Funktion();
Da ich mit vielen Objekten auf dem Datenmodul arbeite, wäre die kurze Variante schon besser. Ich habs schon mit "using namespace datamodul1" versucht, wurde aber nett darauf hingewiesen, dass "datamodul1" ja kein namespace ist
PS: Bin noch relativ neu in C++
-
Hallo
So ein uses gibt es in C/C++ nicht. Das using ist in C++ für namespaces. Die sind zwar für eine ähnliche Aufgabe gedacht, aber dazu müßtest du deine datamodul-Definition von class zu namespace umwandeln (mit den entsprechenden zusätzlichen Konzeptänderungen)
Ansonsten kannst du dir immer noch Zeiger/Referenzen auf die internen Objekte deklarieren und benutzen.
bis bald
akari
-
Frolo schrieb:
habe vorher mit Datenmodulen in Delphi gearbeitet. Sobald ich die Unit in die uses-Klausel geschrieben hab (wie in C++ include) konnte ich auf die enthaltenen Objekte direkt zugreifen. In C++ muss ich immer noch den Namen des Datenmoduls davor schreiben:
//... uses unit_with_datamodul; //... Objekt1.Funktion();
Das glaube ich nicht. Kannst du mal ein vollständiges Minimalbeispiel (d.h. ein Delphi-Projekt, in dem du obigen Shortcut verwendest) bereitstellen? Der Delphi-Compiler sollte auch verlangen, daß du die Datenmodul-Instanz angibst, wenn nicht, ist irgendwas faul.
uses
in Delphi ist, wie du schon festgestellt hast, die Entsprechung zu#include
in C++. In Delphi braucht es allerdings keine Headerdateien, weil das Modulsystem ein bißchen intelligenter ist als das von C++.
-
doch, in Delphi geht das so. Hab das ja direkt davor in Delphi umgesetzt, von daher weiß ich ja, dass das so geht. Das mit dem Zeiger ist allerdings eine gute Idee
Danke!
-
Frolo schrieb:
doch, in Delphi geht das so. Hab das ja direkt davor in Delphi umgesetzt, von daher weiß ich ja, dass das so geht.
Nein, in Delphi geht das nicht so, und bei dir läuft irgendwas falsch.
Ich hab jetzt mit Delphi folgendes gemacht:
- neues VCL-Forms-Projekt erstellt ("Project1", "Unit1")
- neues Datenmodul hinzugefügt ("Unit2"), einen TOpenDialog draufgesetzt ("OpenDialog1")
- in Unit1.pas in derimplementation
-Sektionuses Unit2;
eingefügt
- im Formular einen Button erstellt ("Button1"), einen Eventhandler erzeugt ("TForm1.Button1Click") und diesen Code eingefügt:implementation {$R *.dfm} uses Unit2; procedure TForm1.Button1Click(Sender: TObject); begin OpenDialog1.Execute; end;
Und das müßte deiner Behauptung nach doch gehen, oder? Tut es aber nicht. Erst wenn ich das Datenmodul mit angebe, also
DataModule2.OpenDialog1
, wird das Programm kompiliert.