Array als Member einer Klasse
-
noch was ist mir aufgefallen:
Einen Array als Memebrfunktion einer Klasse zu verwenden funktioniert nicht, den
array in der Memberfunktion jedoch schon.
Wieso das und was gibt es für Lösungen?ref class myClass{ int m[35];// Das geht nicht void f(){ int q[35]; //das geht, bzw. kann zumindest kompiliert werden } };
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
sulky schrieb:
Der Quellcode schrieb sich dabei im Hintergrund automatisch und ich wählte nie eine bestimmte Programmiersprache. Dieses Programmiersprache ist offensichtlich
c++/cli.
Wie kann ich denn nun auf einmal mit c# weiterfahren?Keine Ahnung. Von vorn anfangen, diesmal gleich mit C#?
noch was ist mir aufgefallen:
Einen Array als Memebrfunktion einer Klasse zu verwenden funktioniert nicht, den
array in der Memberfunktion jedoch schon.
Wieso das und was gibt es für Lösungen?Ein Array in einer managed Klasse geht nicht, weil der Garbage Collector mit dem Array nicht umgehen kann. Als lokale Variable wird es beim Verlassen der Funktion abgeräumt, da hat der Garbage Collector nichts mit zu tun.
Und wie schon gesagt, .NET-Arrays kann man in C++/CLI mit cli::array deklarieren.
-
sulky schrieb:
Nun, es war ja nicht ich, der sich für c++/cli entschieden hat.
Als ich mit der Windows Form-Anwendung begann, so begann ich vorallem einmal mit
vielen Mausklicks in der Toolbox.In dem Moment, wo du mit Visual C++ ein Projekt für eine Windows Forms Anwendung erstellst, entscheidest du dich für C++/CLI, denn Windows Forms und C++ schließen sich gegenseitig aus. Microsoft hat allerdings mittlerweile selbst erkannt, dass C++/CLI für Windows Forms Anwendungen unbrauchbar ist, daher gibt es diesen Projekttyp in aktuellen Versionen von Visual Studio nichteinmal mehr...
sulky schrieb:
Wie kann ich denn nun auf einmal mit c# weiterfahren?
Gar nicht, fangt nochmal von vorn an, diesmal gleich in C#.
-
Vielen Dank für eure Hilfe.
Heisst das, dass wenn ich mir eine neuer Version von MSVC++ herunterlade, dann können diese Probleme gar nicht mehr entstehen?
Versucht habe ich
cli::arrayAber wie geht es denn jetzt genau weiter? So wie ich das beim Googeln gefunden habe, wird es ja mega kompliziert, bis das funktioniert.
Jedenfalls mit cli::array int i[20]; geht es nicht.
Bisher fand ich arrays das angenehmste, was es beim Programmieren gibt.
Mann kann einen Array sowohl als Variable, als auch als Zeiger verwenden.
Fände es sehr schade, wenn das jetzt nicht mehr ginge
-
sulky schrieb:
Heisst das, dass wenn ich mir eine neuer Version von MSVC++ herunterlade, dann können diese Probleme gar nicht mehr entstehen?
Nein, das heißt nur, dass aktuelle Versionen von MSVC++ keine Projektvorlage für Windows Forms Anwendungen mit C++/CLI haben. Windows Forms mit C++ geht nicht.
sulky schrieb:
Aber wie geht es denn jetzt genau weiter? So wie ich das beim Googeln gefunden habe, wird es ja mega kompliziert, bis das funktioniert.
Jedenfalls mit cli::array int i[20]; geht es nicht.
Wie gesagt, ich rate dir, dich von C++/CLI fernzuhalten. Diese Sprache ist nur für einen einzigen Zweck gedacht, nämlich managed/unmanaged interop, also das Schreiben von Codeschichten, die nativen Code mit .NET verbinden. Das ist etwas, das selbst erfahrene Programmierer nur tun, wenn es sich nicht vermeiden lässt. Wenn du .NET Anwendungen schreiben willst, dann nimm C# oder eine andere reine .NET Sprache. Wenn du C++ machen willst, dann mach C++.
-
sulky schrieb:
Aber wie geht es denn jetzt genau weiter? So wie ich das beim Googeln gefunden habe, wird es ja mega kompliziert, bis das funktioniert.
Jedenfalls mit cli::array int i[20]; geht es nicht.
Ein letzter Hinweis:
cli::array<int>^ i = gcnew cli::array<int>(20);
Die Zielgruppe von C++/CLI kennt sich sowohl mit C++ als auch mit C# bzw. der .NET-Plattform hinreichend gut aus, um sowas nicht für chinesisch zu halten. Außerdem steht das so fast 1:1 in dem ersten Google-Treffer für "cli::array".
Vielleicht kannst du jetzt eine Entscheidung treffen, ob du dir C++/CLI weiterhin antun willst.Bisher fand ich arrays das angenehmste, was es beim Programmieren gibt.
Arrays gehören in C++ zu dem unangenehmsten, was es gibt. Du hast davon bloß noch nicht viel gemerkt
dot schrieb:
Nein, das heißt nur, dass aktuelle Versionen von MSVC++ keine Projektvorlage für Windows Forms Anwendungen mit C++/CLI haben. Windows Forms mit C++ geht nicht.
Das ist gut zu hören. Ich hab teilweise den Eindruck gehabt, MS will mit C++ mal wieder einen Embrace&Extend abziehen.
-
Bashar schrieb:
dot schrieb:
Nein, das heißt nur, dass aktuelle Versionen von MSVC++ keine Projektvorlage für Windows Forms Anwendungen mit C++/CLI haben. Windows Forms mit C++ geht nicht.
Das ist gut zu hören. Ich hab teilweise den Eindruck gehabt, MS will mit C++ mal wieder einen Embrace&Extend abziehen.
Ich denke, das war auch der ursprüngliche Gedanke, der aber wohl relativ bald fallengelassen wurde (VS 2010 hatte nichtmal Syntax Highlighting für C++/CLI). Windows Forms sind aber ja eh sowieso schon lang wieder veraltet und im Moment wollen sie wohl eher WinRT pushen, das dann auch in C++ vernünftig verwendbar ist. Irgendwo gabs mittlerweile sogar einen MSDN Artikel, wo ganz offiziell stand, dass C++/CLI nur für Interop zu gebrauchen ist und von jeder anderen Verwendung, insbesondere dem Basteln von GUIs, abgeraten wird. Ich find ihn nur nimmer...
-
Gleich geb ichs auf.
Schon mehrfach habe ich für den Eigengebrauch kleine Windows-Form-Anwendungen geschrieben und habe dabei nicht einmal bemerkt, dass ich nicht in c++ schreibe.
Einen Versuch noch:
Gleich zu beginn der Klasse schrieb ich:
cli::array<int>^ i = gcnew cli::array<int>(20);
war das so gemeint?
Ich erhielt folgende Fehlermeldung error C3845.
'member': only static data members can be initialized inside a ref class or value type
-
Member musst du natürlich im Konstruktor initialisieren.