[SFML 2.1 + libmpg123] cannot instantiate abstract class, pure virtual function has no overrider.
Ostatnio zmodyfikowano 2013-12-23 16:12
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 : int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { sfe::Mp3 musique; }
Mp3.h #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; }; }
#endif
Mp3.cpp #include "stdafx.h" #include "Mp3.h" #include <iostream>
namespace sfe { Mp3::Mp3() : myHandle( NULL ) , myBufferSize( 0 ) , myBuffer( NULL ) , sf::SoundStream() { } 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 ); } }
|
|
pekfos |
» 2013-12-23 14:51:14 Powinno być onGetData() i onSeek() (z małej). |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-12-23 16:12:43 Wielkie dzięki :)
|
|
« 1 » |