Problem mit "^" ( Ein systemeigenes Array kann diesen verwalteten Typ nicht enthalten.)
-
Hey zusammen,
Also es geht darum, dass ich aus einem Textfeld (tfCFile, woanders folgendermaßen deklariert: private: System::Windows::Forms::TextBox^ tfCFile;) einen Pfad zu einer Textdatei auslesen und den Inhalt dieser Datei in einem Array speichern möchte.
da das Textfeld mit "^" deklariert ist muss ich die String usw. ja auch so deklarieren oder?
was mach ich falsch?StreamReader^ reader = File::OpenText(tfCFile->Text);
String ^ line;int i = 0;
while (!reader->EndOfStream){
line = reader->ReadLine();
i++;
}
-
was mach ich falsch?
Nimm C#, s. http://www.c-plusplus.net/forum/263084
-
Ich weiß nicht genau, in welcher Progammiersprache Du im Moment bist. Das Caret ^ ist in C der Operator für Bitwise XOR. Das würde hier nicht passen. In anderen Sprachen ist das Caret, soviel ich weiß, der Operator für einen Zeigerzugriff (z.B. Pascal oder Modula).
Lies mal die Grundlagen von C durch und ersetze das Caret durch den Zeigeroperator. Möglicherweise ist damit Dein Problem gelöst.
-
benutze C++/CLI (damit ich Formen benutzen kann)
-
Zeig mal ein Minimalbeispiel das den Fehler produziert (Copy-Paste) + genaue Fehlermeldung (Copy-Paste) + in welcher Zeile dieser auftritt.
@Bonni4355
Vielleicht solltest du Leute die im C++/CLI Forum posten nicht fragen was sie für ne Programmiersprache benutzen, wenn du offenbar nichtmal C++/CLI kannst. ^ in dem Zusammenhang ist schon vollkommen OK.
-
hustbaer schrieb:
Zeig mal ein Minimalbeispiel das den Fehler produziert (Copy-Paste) + genaue Fehlermeldung (Copy-Paste) + in welcher Zeile dieser auftritt.
@Bonni4355
Vielleicht solltest du Leute die im C++/CLI Forum posten nicht fragen was sie für ne Programmiersprache benutzen, wenn du offenbar nichtmal C++/CLI kannst. ^ in dem Zusammenhang ist schon vollkommen OK.Sorry, ich wollte nur helfen. Ich kenne C++/CLI tatsächlich nicht. Ich hatte auch nicht auf das Forum geachtet. Aber ich bin sicher, dass hustbaer, da er ja so schlau ist, die richtige Hilfestellung geben kannst. Oder?
-
Der Fehlermeldung nach zu urteilen versuchst du sowas in der Art:
String ^meinArray[20];
Das geht nicht, du kannst nicht normale Arrays mit managed-Referenzen mischen. Du musst auch managed-Arrays benutzen. Das geht so:
cli::array<String^> meinArray(20);
oder auch
cli::array<String^>^ meinArray = gcnew cli::array<String^>(20);
Kann alles Murks und Nonsense sein, ich mach nicht soviel mit C++/CLI ...
-
mblas schrieb:
benutze C++/CLI (damit ich Formen benutzen kann)
Btw, C# hat genau dieselben Formen.
-
Ah, das wird es wohl sein.
Die Fehlermeldung sagt es eigentlich eh schon sehr genau. Wenn man versucht sie ins englische zurückzuübersetzen wird aus "systemeigen" am ehesten "native", und dann wäre es halbwegs klar gewesen.Da ich diese Einschränkung aber selbst nicht kannte, hätte ich das jetzt auch nicht erraten. Obwohl auch diese Einschränkung logisch ist wenn man darüber nachdenkt: Referenzen müssen ja in einem Bereich liegen über den der GC bescheid weiss, und native Arrays könnte man ja irgendwo erstellen. Eben auch in Bereichen über die der GC nix weiss.
Im Nachinnein ist immer alles so einfach
BTW: wieder ein gutes Beispiel dafür dass man Beispielcode darauf hin testen sollte, ob der Fehler damit auch wirklich noch auftritt. Was er in diesem Fall ja nicht tut.
-
Hat funktioniert. Super Danke.
Eine ausführliche Anleitung über Arrays in C++/CLI gibts auch hier: http://www.codeproject.com/Articles/7704/Arrays-in-C-CLI