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


  • Mod

    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 Forms

    class 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


Anmelden zum Antworten