Zugriff auf 1-D int vector array
-
Hallo,
warum kann ich in OnShow und OnTimer nicht auf das vector array zugreifen und bekomme access violation. Auf int Test funktioniert der Zugriff. Habe ich da in der Deklaration *.h etwas falsch gemacht ?*.cpp
//--------------------------------------------------------------------------- #include <vcl.h> #include <vector> #include <iostream> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { AnzahlBilder = 100; std::vector<int> idxBildArray( AnzahlBilder, -1 ); Test = 99; ShowMessage( "Constructor BA size = " + IntToStr( (int)idxBildArray.size() ) ); ShowMessage( "Constructor Test = " + IntToStr( Test ) ); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormShow(TObject *Sender) { int bld = 0; ShowMessage( "FormShow BA size = " + IntToStr( (int)idxBildArray.size() ) ); ShowMessage( "FormShow Test = " + IntToStr( Test ) ); for ( int i = 0; i < AnzahlBilder; i++ ) { if ( idxBildArray[i] != -1 ) bld++; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { int bld = 0; ShowMessage( "Timer BA size = " + IntToStr( (int)idxBildArray.size() ) ); ShowMessage( "Timer Test = " + IntToStr( Test ) ); for ( int i = 0; i < AnzahlBilder; i++ ) { if ( idxBildArray[i] != -1 ) bld++; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Timer1->Enabled = true; } //---------------------------------------------------------------------------
*.h
//--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <System.Classes.hpp> #include <Vcl.Controls.hpp> #include <Vcl.StdCtrls.hpp> #include <Vcl.Forms.hpp> #include <Vcl.ExtCtrls.hpp> #include <vector> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten TTimer *Timer1; TMemo *Memo1; TButton *Button1; TButton *Button2; void __fastcall FormShow(TObject *Sender); void __fastcall Timer1Timer(TObject *Sender); void __fastcall Button2Click(TObject *Sender); private: // Benutzer-Deklarationen std::vector<int> idxBildArray; int AnzahlBilder; int Test; public: // Benutzer-Deklarationen __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
-
@Ronco sagte in Zugriff auf 1-D int vector array:
AnzahlBilder = 100;
std::vector<int> idxBildArray( AnzahlBilder, -1 );Das erstellt die einen NEUEN vector idxBildArray INNERHALB der Funktion Form1. Dieser hat NICHTS mit dem idxBildArray der Form zu tun.
Du hast ja auch nicht
int AnzahlBilder = 100
geschrieben, sondern das korrekt ohne dasint
gemacht, damit eben keine neue Variable erzeugt wird. Weise einfach zu:idxBildArray = std::vector<int>(AnzahlBilder, -1)
.
-
@wob : Ah, ok, vielen Dank für die schnelle Hilfe.