Fehler: Undiefiniertes Symbol 'mpl_mplayer', wird aber noch im Code erzeugt!
-
Hallo, ich erzeuge mit Folgendem Code, den MediaPlayer:
void __fastcall TForm2::filst_mp3DblClick(TObject *Sender) { int laenge; TMediaPlayer *mpl_player = new TMediaPlayer(this); ... }später dann soll er gestoppt werden, und bei diesem Klickereigniss meint der dann "Undifiniertes Symbol ...".
void __fastcall TForm2::img_stopClick(TObject *Sender) { //Sollte der FileName leer sein, wird nicht gestoppt, da es //sonst zu einer Fehlermeldung kommen würde if(! ( mpl_player->FileName == "") ) { mpl_player->Stop(); //Stopt den MediaPlayer (mpl_player) } }Ich weis man kann es global deklarieren oder die Komponente auf die Form ziehen, nur das nützt mir nichts, da ich den player an einer stelle "delete" und dann wieder neu erzeuge. wie kann ich das nun machen, das es als Symbol für jedes ereignis "anerkannt" wird??
Vielen Dank schon mal!
Gruß Thorsten
-
Hallo
in deiner Klasse (*.h)
TMediaPlayer *mpl_player
in deiner *.cpp
mpl_player = new TMediaPlayer(this);
dann sollte es doch funktionieren
Wenn du etwas local definierst kann es nicht in einer anderen Methode verwendet werden -> Grundlagen !!
MfG
Klaus
-
ja, das man das dann nicht für andere methoden verwenden kann ist klar, deswegen frag ich ja. nur in einer methode mache ich dann
delete mpl_player;und dann erzeuge ich es wieder mit TMediaPlayer blabla
und dann kann ich darauf nicht mehr zu greifen. das ist mein problem
-
ahso oder kann ich wenn ich es in die .h eintrage dann so oft wie ich will löschen und wieder neu erzeugen ??
-
Hallo
du solltest dich mal in die Grundlagen der OOP einarbeiten.
Dann wüßtest du, das genau dafür sogenannte Membervariablen bzw. Klassenattribute benutzt werden.
Du deklarierst also im Header des betreffenden Formsclass TForm1 { private : ... TMediaPlayer *mpl_player; ... };dann kannst du mpl_player mehtodenübergreifend benutzten und für jede Instanz von Form1 hat ein eigenes Attribut davon.
Trotzdem solltest du das nur dann löschen, wenn du genau einmal eine TMediaplayer-Instanz erstellt hast.
Das kannst du eventuell in den Konstruktor bzw. den Destruktor des Forms verlegen.bis bald
akari
-
hmm irgendwie klappt es nicht so wie ich es will.
Mit der Komponente auf die Form ziehen und dann musik abspielen lassen etc. funtioniert bei mir wunderbar. nur bei einem kollegen, stürtzt das Programm dann ab. Da kommt dann eine Fehlermeldung wie "die anwendung hat einen fehler verursacht..."
Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden.Habe dann, wenn man auf play drückt, den code so umgeschrieben, das er die datei erst stopt und den mplayer schließt. dann wird der pfad neu eingelesen und abgespielt. auch das funktioniert bei mir wieder wunderbar, jedoch mein freund bekommt wieder die gleiche fehlermeldung. wodran kann das liegen??
danke
thorsten