Codeteile auslagern
-
Hi Leute.
Ich habe mich gestern mit ein par freundlichen Helfern durch ein Problem gekämpft, Codeteile in eine statische Klasse auszulagern, damit die Methoden darin von anderen Nutzern mitgenutz werden können. Dies war allerdings in C#!
Den Beitrag findet Ihr hier: http://www.c-plusplus.net/forum/311162-full
Vielleicht seht ihr ihn euch einmal an und sagt mir dann, wie ich soetwas in C++ verwirklichen kann. Es gibt ja auch Leute, die in C++ programmieren, die dann gedisst sind.Dank im Voraus, Darius.
Edit:
Ich poste mal den Code, damit ihrn nicht immer hin und her wechseln müsst.
Beispiel einer Statischen Klasse zur Auslagerung von Methoden in C#://Einbinden benötigter namespaces/Bibliotheken using System.IO; using System.Windows.Forms; // Gerüsst mit Klassenname public static class MeineKlasse { // Deklarieren von Variablen public static string line; // Methoden public static void LoadFile(string fileName) { using (StreamReader File = new StreamReader(fileName)) { while((line = File.ReadLine()) != null) { MessageBox.Show(line); } } } }
Theoretisch müsste die Methode unter VC++ soweit meine Kenntnisse sind mit
MeineKlasse->LoadFile("file.txt");
aufgerufen werden. Richtig?
-
Was ist jetzt Deine eigentliche Frage??? Hab es niocht ganz verstanden...
Eine statische Methode ruft man in C++/CLI so auf:
MeineKlasse::LoadFile("file.txt");
-
Sieht die Klasse selbst in C ++ denn auch so aus, wie ich sie gepostet hab?
Muss man also nur die Einbindung der Namespaces inusing namespace System::IO;
ändern?
Und danke für die Info. Ich hätte es sonst mit -> gemacht wie die anderen Methoden in VC ++. Also so wie bei
[code]this->Close();LG, Darius.
PS: Meine eigentliche Frage in einem Satz: Wie sähe die unten gepostete Klasse in C ++ / Cli aus?
-
Das wäre dann ungefähr sowas:
using namespace System; using namespace System::IO; public ref class MeineKlasse sealed abstract { public: static void LoadFile(String^ fileName) { StreamReader^ file = nullptr; try { file = gcnew StreamReader(fileName); String^ line; while((line = file->ReadLine()) != nullptr) { Console::WriteLine(line); } } finally { if (file != nullptr) delete file; } } };
Aber liest Dir mal das durch:
http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/
-
Danke.
Das hab ich gesucht.
Eine Frage hätt' ich noch: Als Header oder *.cpp Datei speichern?Und...
Jochen Kalmbach schrieb:
Aber liest Dir mal das durch:
http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/Deinen Beitrag dazu hab ich schon gelesen.
a) er hat mich überzeugt
b) so ziemlich einiges ist in C# wirklich praktischer, hab ich gemerkt
c) wie man sieht hab ich schon gewechselt (vor 2 Monaten oder so)
d) ich hab ja geschrieben für ANDERE. Und ich hab geschrieben, DIE wären dann gedisst.Man sieht einfach auch am beispiel dieses Forums, es gibt noch viele Leute, die in VC++ mit .net und WinForms proggen.
Aber nochmal danke für den Hinweis.
-
Ich hab das grad mal ausprobiert. Ganz ehrlich VC++ mit .net ist fürn Bieeep. Kein Plan ob das an diesem Visual Studio oder der Spraxhe in Kombi mit Winforms ist.
Sory. Musste grad sein.
Da kann man erstmal einen Namen für die Klasse eingeben, dann erstellt der zwei bekloppte dateien. Was jetzt?
Warum kann de nicht einfach eine Header-Datei ODER eine cpp-Datei machen, die vollkommen Leer sind und die ich speichern kann, wie ich will?Ich bin am überlegen, ob ich es nicht einfach lasse, um VC++ mit .net und WinForms auszurotten. Muhahahaha.
-
Du musst zuerst das Konzept von C++ verstehen um zu verstehen, dass Du *immer* zwei Dateien brauchst (h und cpp).
Es gibt ganz wenige Fälle, wo man nur mit einer h-Datei auskommt (templates).
Die Regel ist: Deklaration in die h-Datei; Implementierung in die cpp-Datei.Du kannst alles in die h-Datei schreiben, *wenn* Du diese h-Datei nur in *einer* cpp-Datei einbindest. Ansonsten musst Du Deklaration und Implementierung trennen.
-
Ah Dankeschön.