Zugriff auf Array außerhalb der Funktion?
-
Hallo zusammen,
ich bin gerade als blutiger Anfänger dabei mir etwas CLI C++ beizubringen, und habe gleich mal eine Frage.
Wie kann ich auf folgendes Array 'myArray' außerhalb der Funktion zugreifen?
public: System::Void button1_Click_1(System::Object^ sender, System::EventArgs^ e) { btnLizenzauswählen->Enabled = false; Stream^ myStream; StreamReader^myStreamReader; array<String^>^myArray = {""}; // Array das den Filestream aufnimmt OpenFileDialog^ myFiledlg = gcnew OpenFileDialog; myFiledlg-> InitialDirectory = "C:\\"; myFiledlg->Filter = "Lizenz Dateien (*.txt)|*.txt"; myFiledlg->FilterIndex = 1; myFiledlg->RestoreDirectory = true; if ( myFiledlg->ShowDialog() == System::Windows::Forms::DialogResult::OK ) { if ( (myStream = myFiledlg->OpenFile()) != nullptr ) { try { richTextBox1->Clear(); String^line; myStreamReader = gcnew StreamReader(myStream); while ( line = myStreamReader->ReadLine() ) { myArray[myArray->Length -1] = line; //Inhalt in Array übergeben Array::Resize(myArray,myArray->Length +1); } richTextBox1->AppendText("Lizenzdatei bereit zum übertragen.\n"); btnLizenzübertragen->Enabled = true; } catch ( Exception^ e) { richTextBox1->Clear(); richTextBox1->AppendText(e->Message); } myStream->Close(); myStreamReader->Close(); } } }
Zum Beispiel möchte ich das Array verwenden, um den eingelesen Inhalt an anderer Stelle weiterzuverabeiten.
gruß
-
Ich denke ich hab mir die Frage selbst beantwortet,
einfach im public: Teil der Klassendefiniton das Array definieren.
-
Wieso ist Dein Click_Event vom Button public?
Ich würde das Problem mit einer Funktion lösen, die dann den Array zurückgibt, zum Erhalt der Datenkapselung.
-
hmm eine eigene Funktion wäre wohl ne Möglichkeit. Aber geht das wirklich nicht per direkten Zugriff?
Falls ich das Array als public definiere, und darauf zugreife, wirft mir das Programm diese Fehlermeldung durch die 'catch' Anweisung:
"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
Was fehlt mir hier noch? Instanziieren des Array
?
grüße
PS: der Click_Event ist public weil ich das zum Testen der Variablengültigkeit geändert habe, muss schon "private" sein.
-
Doch gibt es...
public ref class Form1 : public System::Windows::Forms::Form { public: array<String^>^myArray; // Array das den Filestream aufnimmt Form1(void) { InitializeComponent(); // //TODO: Konstruktorcode hier hinzufügen. // myArray = nullptr; }
Aber ist nicht gut, BÖSE, weil Global.
-
Hallo,
danke für deine Hilfe
.
Da ich es ja lieber richtig machen würde , wie könnte es denn für folgende Konstellation funktionieren.
- Benutzer klickt Button -> es öffnet sich ein Filedialog, wo eine Textdatei ausgewählt wird
- der Inhalt (Streamreader) dieser Textdatei wird in ein Array übergeben
- Anschliessend klickt der Benutz auf den nächsten Button, und dann soll die Aktion XYZ mit dem Array passieren.Da komm ich doch um ein globales Array nicht dran vorbei oder?
gruß
PS: gibt es in C++/CLI sowas wie var_dump bei php? Oder wie kann man den Inhalt des Arrays zur Kontrolle ausgeben, ohne Breakpunkte setzen zu müssen.
-
nachtrag:
myArray = nullptr;
hat es nicht funktioniert, aber mittels:
myArray = gcnew array<String^>(1);
scheints dann zu funktionieren..