Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.1 + libmpg123] cannot instantiate abstract class, pure virtual function has no overrider.

Ostatnio zmodyfikowano 2013-12-23 16:12
Autor Wiadomość
domin568
Temat założony przez niniejszego użytkownika
[SFML 2.1 + libmpg123] cannot instantiate abstract class, pure virtual function has no overrider.
» 2013-12-23 14:47:08
Witam, chcę napisać oddtwarzacz mp3, ale przy próbie kompilacji dostaje błąd : "error C2259: 'sfe::Mp3' : cannot instantiate abstract class" i Visual dodatkowo podpowiada mi :
"
IntelliSense: object of abstract class type "sfe::Mp3" is not allowed:
pure virtual function "sf::SoundStream::onGetData" has no overrider
pure virtual function "sf::SoundStream::onSeek" has no overrider
"
Nie za bardzo wiem jak ten problem rozwiązać, bo kod skopiowałem z GitHuba, w klasie Mp3 jest napisane że sf::SoundStream::onSeek oraz sf::SoundStream::onGetData isnieje też w klasie pochodnej. Bardzo proszę o pomoc, lub jakąś wskazówkę :)
Kod :
main :
C/C++
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    sfe::Mp3 musique; // kosturktor klasy
}
Mp3.h
C/C++
#ifndef MP3_H_INCLUDED
#define MP3_H_INCLUDED

#include <SFML/Audio.hpp>
#include "mpg123.h"

namespace sfe
{
    class Mp3
        : public sf::SoundStream
    {
    public:
        Mp3();
        ~Mp3();
       
        bool OpenFromFile( const std::string & filename );
       
    protected:
        bool OnGetData( Chunk & data );
        void OnSeek( sf::Time timeOffset );
       
    private:
        mpg123_handle * myHandle;
        size_t myBufferSize;
        unsigned char * myBuffer;
        sf::Mutex myMutex;
    };
   
} // namespace sfe

#endif // MP3_H_INCLUDED

Mp3.cpp
C/C++
#include "stdafx.h"
#include "Mp3.h"
#include <iostream>

namespace sfe
{
    Mp3::Mp3()
        : myHandle( NULL )
        , myBufferSize( 0 )
        , myBuffer( NULL )
        , sf::SoundStream() // tą linijke dodałem sam, ale nic nie pomaga wywołanie konstruktora klasy bazowej, w konstruktorze klasy pochodnej, a myślałem że o to chodziło ;/
    {
       
    }
    bool Mp3::OnGetData( Chunk & data )
    {
        sf::Lock lock( myMutex );
       
        if( myHandle )
        {
            size_t done;
            mpg123_read( myHandle, myBuffer, myBufferSize, & done );
           
            data.samples =( short * ) myBuffer;
            data.sampleCount = done / sizeof( short );
           
            return( data.sampleCount > 0 );
        }
        else
             return false;
       
    }
   
    void Mp3::OnSeek( sf::Time timeOffset )
    {
        sf::Lock lock( myMutex );
       
        if( myHandle )
             mpg123_seek( myHandle, timeOffset.asSeconds(), 0 );
       
    }
} // namespace sfe
P-99935
pekfos
» 2013-12-23 14:51:14
Powinno być onGetData() i onSeek() (z małej).
P-99937
domin568
Temat założony przez niniejszego użytkownika
» 2013-12-23 16:12:43
Wielkie dzięki :)
P-99955
« 1 »
  Strona 1 z 1