Форум программистов, компьютерный форум, киберфорум
Наши страницы

Boost C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.70
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
#1

shared_ptr указывающий на интерфейс? - Boost C++

18.01.2013, 18:42. Просмотров 3015. Ответов 27
Метки нет (Все метки)

Возможно ли вот так:
C++
1
2
boost::shared_ptr<HGE> hge; // хочется вот так
HGE * hge; // вместо
Мнение компилятора на всё это следующее:
error C2679: binary '=' : no operator found which takes a right-hand operand of type 'HGE *' (or there is no acceptable conversion)
E:\Source\VisualStudio2008\Project\Phenomen\Phenomen\Source\boost/smart_ptr/shared_ptr.hpp(309): could be 'boost::shared_ptr<T> &boost::shared_ptr<T>::operator =(const boost::shared_ptr<T> &)'
with
[
T=HGE
]
while trying to match the argument list '(boost::shared_ptr<T>, HGE *)'
with
[
T=HGE
]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2013, 18:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос shared_ptr указывающий на интерфейс? (Boost C++):

Почему не дает shared_ptr от this? - C++
Здравствуйте. Вот проблемный код: OwnProject::OwnProject(OwnManager * Manager, const QString &amp; Filename) :...

Помогите разобраться с boost::shared_ptr - Boost C++
shared_prt хранит указатель на динамически создаваемый объект и гарантирует, что объект будет удален только после того как перестанет...

boost/shared_ptr (Smart Pointers) - Boost C++
Допустим есть проект // // (---.Array_hpp---) // #ifndef Array_HPP // Preprocessor gates #define...

Как определить тип указателя shared_ptr<T>? - Boost C++
Прошу не удалять, в с++ для начинающих не смогли мне ответить есть классы: class char_int { public: char_int(int...

Не удаляется объект после уничтожения shared_ptr - Boost C++
Добрый день Не могу понт почему так происходит? class Widget { public: void sayHello(){ cout &lt;&lt; &quot;Hello!\n&quot;; ...

Отличие std::auto_ptr<SomeType> от boost::shared_ptr<SomType> - Boost C++
Господа программисты, хочу задать вам вопрос: чем умный указатель std::auto_ptr&lt;SomeType&gt; отличается от бустового умного указателя...

27
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
18.01.2013, 19:00 #2
vbloodv, Определенно можно. Но инициализировать/присваивать тоже нужно по-другому.
Пример
C++
1
boost::shared_ptr<HGE> shptr(new HGE());
C++
1
boost::shared_ptr<HGR> shptr = boost::shared_ptr<HGE>(new HGE());
C++
1
shptr.reset(new HGE());
1
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
19.01.2013, 16:15  [ТС] #3
..\Source\Phenomen.cpp(18) : error C2259: 'HGE' : cannot instantiate abstract class
1> due to following members:
1> 'void HGE::Release(void)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(276) : see declaration of 'HGE::Release'
1> 'bool HGE::System_Initiate(void)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(278) : see declaration of 'HGE::System_Initiate'
1> 'void HGE::System_Shutdown(void)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(279) : see declaration of 'HGE::System_Shutdown'
1> 'bool HGE::System_Start(void)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(280) : see declaration of 'HGE::System_Start'
1> 'char *HGE::System_GetErrorMessage(void)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(281) : see declaration of 'HGE::System_GetErrorMessage'
1> 'void HGE::System_Log(const char *,...)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(282) : see declaration of 'HGE::System_Log'
1> 'bool HGE::System_Launch(const char *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(283) : see declaration of 'HGE::System_Launch'
1> 'void HGE::System_Snapshot(const char *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(284) : see declaration of 'HGE::System_Snapshot'
1> 'void HGE::System_SetStateBool(hgeBoolState,bool)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(287) : see declaration of 'HGE::System_SetStateBool'
1> 'void HGE::System_SetStateFunc(hgeFuncState,hgeCallback)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(288) : see declaration of 'HGE::System_SetStateFunc'
1> 'void HGE::System_SetStateHwnd(hgeHwndState,HWND)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(289) : see declaration of 'HGE::System_SetStateHwnd'
1> 'void HGE::System_SetStateInt(hgeIntState,int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(290) : see declaration of 'HGE::System_SetStateInt'
1> 'void HGE::System_SetStateString(hgeStringState,const char *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(291) : see declaration of 'HGE::System_SetStateString'
1> 'bool HGE::System_GetStateBool(hgeBoolState)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(292) : see declaration of 'HGE::System_GetStateBool'
1> 'hgeCallback HGE::System_GetStateFunc(hgeFuncState)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(293) : see declaration of 'HGE::System_GetStateFunc'
1> 'HWND HGE::System_GetStateHwnd(hgeHwndState)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(294) : see declaration of 'HGE::System_GetStateHwnd'
1> 'int HGE::System_GetStateInt(hgeIntState)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(295) : see declaration of 'HGE::System_GetStateInt'
1> 'const char *HGE::System_GetStateString(hgeStringState)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(296) : see declaration of 'HGE::System_GetStateString'
1> 'void *HGE::Resource_Load(const char *,DWORD *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(310) : see declaration of 'HGE::Resource_Load'
1> 'void HGE::Resource_Free(void *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(311) : see declaration of 'HGE::Resource_Free'
1> 'bool HGE::Resource_AttachPack(const char *,const char *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(312) : see declaration of 'HGE::Resource_AttachPack'
1> 'void HGE::Resource_RemovePack(const char *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(313) : see declaration of 'HGE::Resource_RemovePack'
1> 'void HGE::Resource_RemoveAllPacks(void)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(314) : see declaration of 'HGE::Resource_RemoveAllPacks'
1> 'char *HGE::Resource_MakePath(const char *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(315) : see declaration of 'HGE::Resource_MakePath'
1> 'char *HGE::Resource_EnumFiles(const char *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(316) : see declaration of 'HGE::Resource_EnumFiles'
1> 'char *HGE::Resource_EnumFolders(const char *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(317) : see declaration of 'HGE::Resource_EnumFolders'
1> 'void HGE::Ini_SetInt(const char *,const char *,int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(319) : see declaration of 'HGE::Ini_SetInt'
1> 'int HGE::Ini_GetInt(const char *,const char *,int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(320) : see declaration of 'HGE::Ini_GetInt'
1> 'void HGE::Ini_SetFloat(const char *,const char *,float)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(321) : see declaration of 'HGE::Ini_SetFloat'
1> 'float HGE::Ini_GetFloat(const char *,const char *,float)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(322) : see declaration of 'HGE::Ini_GetFloat'
1> 'void HGE::Ini_SetString(const char *,const char *,const char *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(323) : see declaration of 'HGE::Ini_SetString'
1> 'char *HGE::Ini_GetString(const char *,const char *,const char *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(324) : see declaration of 'HGE::Ini_GetString'
1> 'void HGE::Random_Seed(int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(326) : see declaration of 'HGE::Random_Seed'
1> 'int HGE::Random_Int(int,int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(327) : see declaration of 'HGE::Random_Int'
1> 'float HGE::Random_Float(float,float)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(328) : see declaration of 'HGE::Random_Float'
1> 'float HGE::Timer_GetTime(void)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(330) : see declaration of 'HGE::Timer_GetTime'
1> 'float HGE::Timer_GetDelta(void)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(331) : see declaration of 'HGE::Timer_GetDelta'
1> 'int HGE::Timer_GetFPS(void)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(332) : see declaration of 'HGE::Timer_GetFPS'
1> 'HEFFECT HGE::Effect_Load(const char *,DWORD)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(334) : see declaration of 'HGE::Effect_Load'
1> 'void HGE::Effect_Free(HEFFECT)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(335) : see declaration of 'HGE::Effect_Free'
1> 'HCHANNEL HGE::Effect_Play(HEFFECT)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(336) : see declaration of 'HGE::Effect_Play'
1> 'HCHANNEL HGE::Effect_PlayEx(HEFFECT,int,int,float,bool)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(337) : see declaration of 'HGE::Effect_PlayEx'
1> 'HMUSIC HGE::Music_Load(const char *,DWORD)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(339) : see declaration of 'HGE::Music_Load'
1> 'void HGE::Music_Free(HMUSIC)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(340) : see declaration of 'HGE::Music_Free'
1> 'HCHANNEL HGE::Music_Play(HMUSIC,bool,int,int,int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(341) : see declaration of 'HGE::Music_Play'
1> 'void HGE::Music_SetAmplification(HMUSIC,int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(342) : see declaration of 'HGE::Music_SetAmplification'
1> 'int HGE::Music_GetAmplification(HMUSIC)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(343) : see declaration of 'HGE::Music_GetAmplification'
1> 'int HGE::Music_GetLength(HMUSIC)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(344) : see declaration of 'HGE::Music_GetLength'
1> 'void HGE::Music_SetPos(HMUSIC,int,int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(345) : see declaration of 'HGE::Music_SetPos'
1> 'bool HGE::Music_GetPos(HMUSIC,int *,int *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(346) : see declaration of 'HGE::Music_GetPos'
1> 'void HGE::Music_SetInstrVolume(HMUSIC,int,int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(347) : see declaration of 'HGE::Music_SetInstrVolume'
1> 'int HGE::Music_GetInstrVolume(HMUSIC,int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(348) : see declaration of 'HGE::Music_GetInstrVolume'
1> 'void HGE::Music_SetChannelVolume(HMUSIC,int,int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(349) : see declaration of 'HGE::Music_SetChannelVolume'
1> 'int HGE::Music_GetChannelVolume(HMUSIC,int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(350) : see declaration of 'HGE::Music_GetChannelVolume'
1> 'HSTREAM HGE::Stream_Load(const char *,DWORD)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(352) : see declaration of 'HGE::Stream_Load'
1> 'void HGE::Stream_Free(HSTREAM)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(353) : see declaration of 'HGE::Stream_Free'
1> 'HCHANNEL HGE::Stream_Play(HSTREAM,bool,int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(354) : see declaration of 'HGE::Stream_Play'
1> 'void HGE::Channel_SetPanning(HCHANNEL,int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(356) : see declaration of 'HGE::Channel_SetPanning'
1> 'void HGE::Channel_SetVolume(HCHANNEL,int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(357) : see declaration of 'HGE::Channel_SetVolume'
1> 'void HGE::Channel_SetPitch(HCHANNEL,float)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(358) : see declaration of 'HGE::Channel_SetPitch'
1> 'void HGE::Channel_Pause(HCHANNEL)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(359) : see declaration of 'HGE::Channel_Pause'
1> 'void HGE::Channel_Resume(HCHANNEL)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(360) : see declaration of 'HGE::Channel_Resume'
1> 'void HGE::Channel_Stop(HCHANNEL)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(361) : see declaration of 'HGE::Channel_Stop'
1> 'void HGE::Channel_PauseAll(void)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(362) : see declaration of 'HGE::Channel_PauseAll'
1> 'void HGE::Channel_ResumeAll(void)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(363) : see declaration of 'HGE::Channel_ResumeAll'
1> 'void HGE::Channel_StopAll(void)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(364) : see declaration of 'HGE::Channel_StopAll'
1> 'bool HGE::Channel_IsPlaying(HCHANNEL)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(365) : see declaration of 'HGE::Channel_IsPlaying'
1> 'float HGE::Channel_GetLength(HCHANNEL)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(366) : see declaration of 'HGE::Channel_GetLength'
1> 'float HGE::Channel_GetPos(HCHANNEL)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(367) : see declaration of 'HGE::Channel_GetPos'
1> 'void HGE::Channel_SetPos(HCHANNEL,float)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(368) : see declaration of 'HGE::Channel_SetPos'
1> 'void HGE::Channel_SlideTo(HCHANNEL,float,int,int,float)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(369) : see declaration of 'HGE::Channel_SlideTo'
1> 'bool HGE::Channel_IsSliding(HCHANNEL)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(370) : see declaration of 'HGE::Channel_IsSliding'
1> 'void HGE::Input_GetMousePos(float *,float *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(372) : see declaration of 'HGE::Input_GetMousePos'
1> 'void HGE::Input_SetMousePos(float,float)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(373) : see declaration of 'HGE::Input_SetMousePos'
1> 'int HGE::Input_GetMouseWheel(void)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(374) : see declaration of 'HGE::Input_GetMouseWheel'
1> 'bool HGE::Input_IsMouseOver(void)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(375) : see declaration of 'HGE::Input_IsMouseOver'
1> 'bool HGE::Input_KeyDown(int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(376) : see declaration of 'HGE::Input_KeyDown'
1> 'bool HGE::Input_KeyUp(int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(377) : see declaration of 'HGE::Input_KeyUp'
1> 'bool HGE::Input_GetKeyState(int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(378) : see declaration of 'HGE::Input_GetKeyState'
1> 'char *HGE::Input_GetKeyName(int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(379) : see declaration of 'HGE::Input_GetKeyName'
1> 'int HGE::Input_GetKey(void)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(380) : see declaration of 'HGE::Input_GetKey'
1> 'int HGE::Input_GetChar(void)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(381) : see declaration of 'HGE::Input_GetChar'
1> 'bool HGE::Input_GetEvent(hgeInputEvent *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(382) : see declaration of 'HGE::Input_GetEvent'
1> 'bool HGE::Gfx_BeginScene(HTARGET)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(384) : see declaration of 'HGE::Gfx_BeginScene'
1> 'void HGE::Gfx_EndScene(void)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(385) : see declaration of 'HGE::Gfx_EndScene'
1> 'void HGE::Gfx_Clear(DWORD)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(386) : see declaration of 'HGE::Gfx_Clear'
1> 'void HGE::Gfx_RenderLine(float,float,float,float,DWORD,float)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(387) : see declaration of 'HGE::Gfx_RenderLine'
1> 'void HGE::Gfx_RenderTriple(const hgeTriple *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(388) : see declaration of 'HGE::Gfx_RenderTriple'
1> 'void HGE::Gfx_RenderQuad(const hgeQuad *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(389) : see declaration of 'HGE::Gfx_RenderQuad'
1> 'hgeVertex *HGE::Gfx_StartBatch(int,HTEXTURE,int,int *)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(390) : see declaration of 'HGE::Gfx_StartBatch'
1> 'void HGE::Gfx_FinishBatch(int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(391) : see declaration of 'HGE::Gfx_FinishBatch'
1> 'void HGE::Gfx_SetClipping(int,int,int,int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(392) : see declaration of 'HGE::Gfx_SetClipping'
1> 'void HGE::Gfx_SetTransform(float,float,float,float,float,float,float)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(393) : see declaration of 'HGE::Gfx_SetTransform'
1> 'HTARGET HGE::Target_Create(int,int,bool)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(395) : see declaration of 'HGE::Target_Create'
1> 'void HGE::Target_Free(HTARGET)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(396) : see declaration of 'HGE::Target_Free'
1> 'HTEXTURE HGE::Target_GetTexture(HTARGET)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(397) : see declaration of 'HGE::Target_GetTexture'
1> 'HTEXTURE HGE::Texture_Create(int,int)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(399) : see declaration of 'HGE::Texture_Create'
1> 'HTEXTURE HGE::Texture_Load(const char *,DWORD,bool)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(400) : see declaration of 'HGE::Texture_Load'
1> 'void HGE::Texture_Free(HTEXTURE)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(401) : see declaration of 'HGE::Texture_Free'
1> 'int HGE::Texture_GetWidth(HTEXTURE,bool)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(402) : see declaration of 'HGE::Texture_GetWidth'
1> 'int HGE::Texture_GetHeight(HTEXTURE,bool)' : is abstract
1> e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(403) : see declaration of 'HGE::Texture_GetHeight'
'DWORD *HGE::Texture_Lock(HTEXTURE,bool,int,int,int,int)' : is abstract
e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(404) : see declaration of 'HGE::Texture_Lock'
'void HGE::Texture_Unlock(HTEXTURE)' : is abstract
e:\source\visualstudio2008\project\phenomen\phenomen\source\hge\hge.h(405) : see declaration of 'HGE::Texture_Unlock'
0
Maxim Prishchepa
Эксперт С++
1923 / 1035 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
19.01.2013, 16:36 #4
в качестве шаблона передавайте интерфейс, в качестве указателя передавайте конкретную реализацию этого интерфейса:

C++ (Qt)
1
2
3
4
5
6
7
8
class IClass {
   public: virtual void myF() = 0;
};
class MyClass: public IClass {
    public: void myF() { std::cout<< "Hey!!!";}
};
 
shared_ptr<IClass> ptr(new MyClass());
Добавлено через 1 минуту
*ps: код бы тегом обвели и спрятали за спойлером, а то уж очень не красиво...
1
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
19.01.2013, 16:51  [ТС] #5
Цитата Сообщение от l_a_m Посмотреть сообщение
ps: код бы тегом обвели и спрятали за спойлером, а то уж очень не красиво...
Учту, это важно для всех нас

Добавлено через 6 минут
Мне бы заменить конкретную строчку:
C++
1
2
3
HGE * hge;
// на эту:
boost::shared_ptr<HGE> hge(HGE());
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "vld.h"
#include <windows.h>
#include "boost/shared_ptr.hpp"
#include <hge.h>
//#include <hgegui.h>
//#include <hgecolor.h>
//#include <hgefont.h>
 
//#include "c_GameManager.h"
 
// CallBackFunction
bool FrameFunc(); 
bool RenderFunc();  
 
 
 
//boost::shared_ptr<GameManager> Manager(new GameManager);
//std::tr1::shared_ptr<HGE> Hge(new HGE);
 
 
 //HGE * hge;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
 
    //boost::shared_ptr<HGE> (HGE());
    boost::shared_ptr<HGE> hge(HGE());
//  Manager->Initialisation();
//  Manager->Run();
//  Manager->SetCallBackFunction(FrameFunc,RenderFunc);
    return 0;
}
 
 
 
bool FrameFunc()
{
//  Manager->UpdateScene();
    return false;
} // Redirect to GameManager
bool RenderFunc()
{
    //Manager->RenderScene();
    return false;
} // Redirect to GameManager

Под спойлером весь код файла. Может что можно еще подсказать по моему примеру, конкретнее. Так сказать на пальцах?
0
Maxim Prishchepa
Эксперт С++
1923 / 1035 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
19.01.2013, 16:54 #6
я так понимаю HGE это интерфейс или абстрактный класс, следовательно должна быть где-то его реализация, другой класс на его базе, вот и напишите аля:
C++ (Qt)
1
boost::shared_ptr<HGE> hge(new HGE_REALISATION());
1
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
19.01.2013, 17:08  [ТС] #7
HGE графический 2D движок обертка над DirectХ. Мне кажется он весь впихнут в статическую либо, потому что везде его подключают через указатель. Хотелось бы его запихнуть в умную реализацию. Вот что в hge.h находиться:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
/*
** Haaf's Game Engine 1.8
** Copyright (C) 2003-2007, Relish Games
** hge.relishgames.com
**
** System layer API
*/
 
 
#ifndef HGE_H
#define HGE_H
 
 
#include <windows.h>
 
#define HGE_VERSION 0x180
 
#ifdef HGEDLL
#define EXPORT  __declspec(dllexport)
#else
#define EXPORT
#endif
 
#define CALL  __stdcall
 
#ifdef __BORLANDC__
 #define floorf (float)floor
 #define sqrtf (float)sqrt
 #define acosf (float)acos
 #define atan2f (float)atan2
 #define cosf (float)cos
 #define sinf (float)sin
 #define powf (float)pow
 #define fabsf (float)fabs
 
 #define min(x,y) ((x) < (y)) ? (x) : (y)
 #define max(x,y) ((x) > (y)) ? (x) : (y)
#endif
 
 
/*
** Common data types
*/
#ifndef DWORD
typedef unsigned long       DWORD;
typedef unsigned short      WORD;
typedef unsigned char       BYTE;
#endif
 
 
/*
** Common math constants
*/
#ifndef M_PI
#define M_PI    3.14159265358979323846f
#define M_PI_2  1.57079632679489661923f
#define M_PI_4  0.785398163397448309616f
#define M_1_PI  0.318309886183790671538f
#define M_2_PI  0.636619772367581343076f
#endif
 
 
/*
** HGE Handle types
*/
typedef DWORD HTEXTURE;
typedef DWORD HTARGET;
typedef DWORD HEFFECT;
typedef DWORD HMUSIC;
typedef DWORD HSTREAM;
typedef DWORD HCHANNEL;
 
 
/*
** Hardware color macros
*/
#define ARGB(a,r,g,b)   ((DWORD(a)<<24) + (DWORD(r)<<16) + (DWORD(g)<<8) + DWORD(b))
#define GETA(col)       ((col)>>24)
#define GETR(col)       (((col)>>16) & 0xFF)
#define GETG(col)       (((col)>>8) & 0xFF)
#define GETB(col)       ((col) & 0xFF)
#define SETA(col,a)     (((col) & 0x00FFFFFF) + (DWORD(a)<<24))
#define SETR(col,r)     (((col) & 0xFF00FFFF) + (DWORD(r)<<16))
#define SETG(col,g)     (((col) & 0xFFFF00FF) + (DWORD(g)<<8))
#define SETB(col,b)     (((col) & 0xFFFFFF00) + DWORD(b))
 
 
/*
** HGE Blending constants
*/
#define BLEND_COLORADD      1
#define BLEND_COLORMUL      0
#define BLEND_ALPHABLEND    2
#define BLEND_ALPHAADD      0
#define BLEND_ZWRITE        4
#define BLEND_NOZWRITE      0
 
#define BLEND_DEFAULT       (BLEND_COLORMUL | BLEND_ALPHABLEND | BLEND_NOZWRITE)
#define BLEND_DEFAULT_Z     (BLEND_COLORMUL | BLEND_ALPHABLEND | BLEND_ZWRITE)
 
 
/*
** HGE System state constants
*/
enum hgeBoolState
{
    HGE_WINDOWED        = 1,    // bool     run in window?      (default: false)
    HGE_ZBUFFER         = 2,    // bool     use z-buffer?       (default: false)
    HGE_TEXTUREFILTER   = 3,    // bool     texture filtering?  (default: true)
    
    HGE_USESOUND        = 4,    // bool     use BASS for sound? (default: true)
    
    HGE_DONTSUSPEND     = 5,    // bool     focus lost:suspend? (default: false)
    HGE_HIDEMOUSE       = 6,    // bool     hide system cursor? (default: true)
 
    HGE_SHOWSPLASH      = 7,    // bool     hide system cursor? (default: true)
 
    HGEBOOLSTATE_FORCE_DWORD = 0x7FFFFFFF
};
 
enum hgeFuncState
{
    HGE_FRAMEFUNC       = 8,    // bool*()  frame function      (default: NULL) (you MUST set this)
    HGE_RENDERFUNC      = 9,    // bool*()  render function     (default: NULL)
    HGE_FOCUSLOSTFUNC   = 10,   // bool*()  focus lost function (default: NULL)
    HGE_FOCUSGAINFUNC   = 11,   // bool*()  focus gain function (default: NULL)
    HGE_GFXRESTOREFUNC  = 12,   // bool*()  exit function       (default: NULL)
    HGE_EXITFUNC        = 13,   // bool*()  exit function       (default: NULL)
    
    HGEFUNCSTATE_FORCE_DWORD = 0x7FFFFFFF
};
 
enum hgeHwndState
{
    HGE_HWND            = 15,   // int      window handle: read only
    HGE_HWNDPARENT      = 16,   // int      parent win handle   (default: 0)
    
    HGEHWNDSTATE_FORCE_DWORD = 0x7FFFFFFF
};
 
enum hgeIntState
{
    HGE_SCREENWIDTH     = 17,   // int      screen width        (default: 800)
    HGE_SCREENHEIGHT    = 18,   // int      screen height       (default: 600)
    HGE_SCREENBPP       = 19,   // int      screen bitdepth     (default: 32) (desktop bpp in windowed mode)
    
    HGE_SAMPLERATE      = 20,   // int      sample rate         (default: 44100)
    HGE_FXVOLUME        = 21,   // int      global fx volume    (default: 100)
    HGE_MUSVOLUME       = 22,   // int      global music volume (default: 100)
    HGE_STREAMVOLUME    = 23,   // int      global music volume (default: 100)
    
    HGE_FPS             = 24,   // int      fixed fps           (default: HGEFPS_UNLIMITED)
 
    HGE_POWERSTATUS     = 25,   // int      battery life percent + status
    
    HGEINTSTATE_FORCE_DWORD = 0x7FFFFFF
};
 
enum hgeStringState
{
    HGE_ICON            = 26,   // char*    icon resource       (default: NULL)
    HGE_TITLE           = 27,   // char*    window title        (default: "HGE")
    
    HGE_INIFILE         = 28,   // char*    ini file            (default: NULL) (meaning no file)
    HGE_LOGFILE         = 29,   // char*    log file            (default: NULL) (meaning no file)
 
    HGESTRINGSTATE_FORCE_DWORD = 0x7FFFFFFF
};
 
/*
** Callback protoype used by HGE
*/
typedef bool (*hgeCallback)();
 
 
/*
** HGE_FPS system state special constants
*/
#define HGEFPS_UNLIMITED    0
#define HGEFPS_VSYNC        -1
 
 
/*
** HGE_POWERSTATUS system state special constants
*/
#define HGEPWR_AC           -1
#define HGEPWR_UNSUPPORTED  -2
 
 
/*
** HGE Primitive type constants
*/
#define HGEPRIM_LINES       2
#define HGEPRIM_TRIPLES     3
#define HGEPRIM_QUADS       4
 
 
/*
** HGE Vertex structure
*/
struct hgeVertex
{
    float           x, y;       // screen position    
    float           z;          // Z-buffer depth 0..1
    DWORD           col;        // color
    float           tx, ty;     // texture coordinates
};
 
 
/*
** HGE Triple structure
*/
struct hgeTriple
{
    hgeVertex       v[3];
    HTEXTURE        tex;
    int             blend;
};
 
 
/*
** HGE Quad structure
*/
struct hgeQuad
{
    hgeVertex       v[4];
    HTEXTURE        tex;
    int             blend;
};
 
 
/*
** HGE Input Event structure
*/
struct hgeInputEvent
{
    int     type;           // event type
    int     key;            // key code
    int     flags;          // event flags
    int     chr;            // character code
    int     wheel;          // wheel shift
    float   x;              // mouse cursor x-coordinate
    float   y;              // mouse cursor y-coordinate
};
 
 
/*
** HGE Input Event type constants
*/
#define INPUT_KEYDOWN       1
#define INPUT_KEYUP         2
#define INPUT_MBUTTONDOWN   3
#define INPUT_MBUTTONUP     4
#define INPUT_MOUSEMOVE     5
#define INPUT_MOUSEWHEEL    6
 
 
/*
** HGE Input Event flags
*/
#define HGEINP_SHIFT        1
#define HGEINP_CTRL         2
#define HGEINP_ALT          4
#define HGEINP_CAPSLOCK     8
#define HGEINP_SCROLLLOCK   16
#define HGEINP_NUMLOCK      32
#define HGEINP_REPEAT       64
 
 
/*
** HGE Interface class
*/
class HGE
{
public:
    virtual void        CALL    Release() = 0;
 
    virtual bool        CALL    System_Initiate() = 0;
    virtual void        CALL    System_Shutdown() = 0;
    virtual bool        CALL    System_Start() = 0;
    virtual char*       CALL    System_GetErrorMessage() = 0;
    virtual void        CALL    System_Log(const char *format, ...) = 0;
    virtual bool        CALL    System_Launch(const char *url) = 0;
    virtual void        CALL    System_Snapshot(const char *filename=0) = 0;
 
private:
    virtual void        CALL    System_SetStateBool  (hgeBoolState   state, bool        value) = 0;
    virtual void        CALL    System_SetStateFunc  (hgeFuncState   state, hgeCallback value) = 0;
    virtual void        CALL    System_SetStateHwnd  (hgeHwndState   state, HWND        value) = 0;
    virtual void        CALL    System_SetStateInt   (hgeIntState    state, int         value) = 0;
    virtual void        CALL    System_SetStateString(hgeStringState state, const char *value) = 0;
    virtual bool        CALL    System_GetStateBool  (hgeBoolState   state) = 0;
    virtual hgeCallback CALL    System_GetStateFunc  (hgeFuncState   state) = 0;
    virtual HWND        CALL    System_GetStateHwnd  (hgeHwndState   state) = 0;
    virtual int         CALL    System_GetStateInt   (hgeIntState    state) = 0;
    virtual const char* CALL    System_GetStateString(hgeStringState state) = 0;
 
public:
    inline void                 System_SetState(hgeBoolState   state, bool        value) { System_SetStateBool  (state, value); }
    inline void                 System_SetState(hgeFuncState   state, hgeCallback value) { System_SetStateFunc  (state, value); }
    inline void                 System_SetState(hgeHwndState   state, HWND        value) { System_SetStateHwnd  (state, value); }
    inline void                 System_SetState(hgeIntState    state, int         value) { System_SetStateInt   (state, value); }
    inline void                 System_SetState(hgeStringState state, const char *value) { System_SetStateString(state, value); }
    inline bool                 System_GetState(hgeBoolState   state) { return System_GetStateBool  (state); }
    inline hgeCallback          System_GetState(hgeFuncState   state) { return System_GetStateFunc  (state); }
    inline HWND                 System_GetState(hgeHwndState   state) { return System_GetStateHwnd  (state); }
    inline int                  System_GetState(hgeIntState    state) { return System_GetStateInt   (state); }
    inline const char*          System_GetState(hgeStringState state) { return System_GetStateString(state); }
    
    virtual void*       CALL    Resource_Load(const char *filename, DWORD *size=0) = 0;
    virtual void        CALL    Resource_Free(void *res) = 0;
    virtual bool        CALL    Resource_AttachPack(const char *filename, const char *password=0) = 0;
    virtual void        CALL    Resource_RemovePack(const char *filename) = 0;
    virtual void        CALL    Resource_RemoveAllPacks() = 0;
    virtual char*       CALL    Resource_MakePath(const char *filename=0) = 0;
    virtual char*       CALL    Resource_EnumFiles(const char *wildcard=0) = 0;
    virtual char*       CALL    Resource_EnumFolders(const char *wildcard=0) = 0;
 
    virtual void        CALL    Ini_SetInt(const char *section, const char *name, int value) = 0;
    virtual int         CALL    Ini_GetInt(const char *section, const char *name, int def_val) = 0;
    virtual void        CALL    Ini_SetFloat(const char *section, const char *name, float value) = 0;
    virtual float       CALL    Ini_GetFloat(const char *section, const char *name, float def_val) = 0;
    virtual void        CALL    Ini_SetString(const char *section, const char *name, const char *value) = 0;
    virtual char*       CALL    Ini_GetString(const char *section, const char *name, const char *def_val) = 0;
 
    virtual void        CALL    Random_Seed(int seed=0) = 0;
    virtual int         CALL    Random_Int(int min, int max) = 0;
    virtual float       CALL    Random_Float(float min, float max) = 0;
 
    virtual float       CALL    Timer_GetTime() = 0;
    virtual float       CALL    Timer_GetDelta() = 0;
    virtual int         CALL    Timer_GetFPS() = 0;
 
    virtual HEFFECT     CALL    Effect_Load(const char *filename, DWORD size=0) = 0;
    virtual void        CALL    Effect_Free(HEFFECT eff) = 0;
    virtual HCHANNEL    CALL    Effect_Play(HEFFECT eff) = 0;
    virtual HCHANNEL    CALL    Effect_PlayEx(HEFFECT eff, int volume=100, int pan=0, float pitch=1.0f, bool loop=false) = 0;
 
    virtual HMUSIC      CALL    Music_Load(const char *filename, DWORD size=0) = 0;
    virtual void        CALL    Music_Free(HMUSIC mus) = 0;
    virtual HCHANNEL    CALL    Music_Play(HMUSIC mus, bool loop, int volume = 100, int order = -1, int row = -1) = 0;
    virtual void        CALL    Music_SetAmplification(HMUSIC music, int ampl) = 0;
    virtual int         CALL    Music_GetAmplification(HMUSIC music) = 0;
    virtual int         CALL    Music_GetLength(HMUSIC music) = 0;
    virtual void        CALL    Music_SetPos(HMUSIC music, int order, int row) = 0;
    virtual bool        CALL    Music_GetPos(HMUSIC music, int *order, int *row) = 0;
    virtual void        CALL    Music_SetInstrVolume(HMUSIC music, int instr, int volume) = 0;
    virtual int         CALL    Music_GetInstrVolume(HMUSIC music, int instr) = 0;
    virtual void        CALL    Music_SetChannelVolume(HMUSIC music, int channel, int volume) = 0;
    virtual int         CALL    Music_GetChannelVolume(HMUSIC music, int channel) = 0;
 
    virtual HSTREAM     CALL    Stream_Load(const char *filename, DWORD size=0) = 0;
    virtual void        CALL    Stream_Free(HSTREAM stream) = 0;
    virtual HCHANNEL    CALL    Stream_Play(HSTREAM stream, bool loop, int volume = 100) = 0;
 
    virtual void        CALL    Channel_SetPanning(HCHANNEL chn, int pan) = 0;
    virtual void        CALL    Channel_SetVolume(HCHANNEL chn, int volume) = 0;
    virtual void        CALL    Channel_SetPitch(HCHANNEL chn, float pitch) = 0;
    virtual void        CALL    Channel_Pause(HCHANNEL chn) = 0;
    virtual void        CALL    Channel_Resume(HCHANNEL chn) = 0;
    virtual void        CALL    Channel_Stop(HCHANNEL chn) = 0;
    virtual void        CALL    Channel_PauseAll() = 0;
    virtual void        CALL    Channel_ResumeAll() = 0;
    virtual void        CALL    Channel_StopAll() = 0;
    virtual bool        CALL    Channel_IsPlaying(HCHANNEL chn) = 0;
    virtual float       CALL    Channel_GetLength(HCHANNEL chn) = 0;
    virtual float       CALL    Channel_GetPos(HCHANNEL chn) = 0;
    virtual void        CALL    Channel_SetPos(HCHANNEL chn, float fSeconds) = 0;
    virtual void        CALL    Channel_SlideTo(HCHANNEL channel, float time, int volume, int pan = -101, float pitch = -1) = 0;
    virtual bool        CALL    Channel_IsSliding(HCHANNEL channel) = 0;
 
    virtual void        CALL    Input_GetMousePos(float *x, float *y) = 0;
    virtual void        CALL    Input_SetMousePos(float x, float y) = 0;
    virtual int         CALL    Input_GetMouseWheel() = 0;
    virtual bool        CALL    Input_IsMouseOver() = 0;
    virtual bool        CALL    Input_KeyDown(int key) = 0;
    virtual bool        CALL    Input_KeyUp(int key) = 0;
    virtual bool        CALL    Input_GetKeyState(int key) = 0;
    virtual char*       CALL    Input_GetKeyName(int key) = 0;
    virtual int         CALL    Input_GetKey() = 0;
    virtual int         CALL    Input_GetChar() = 0;
    virtual bool        CALL    Input_GetEvent(hgeInputEvent *event) = 0;
 
    virtual bool        CALL    Gfx_BeginScene(HTARGET target=0) = 0;
    virtual void        CALL    Gfx_EndScene() = 0;
    virtual void        CALL    Gfx_Clear(DWORD color) = 0;
    virtual void        CALL    Gfx_RenderLine(float x1, float y1, float x2, float y2, DWORD color=0xFFFFFFFF, float z=0.5f) = 0;
    virtual void        CALL    Gfx_RenderTriple(const hgeTriple *triple) = 0;
    virtual void        CALL    Gfx_RenderQuad(const hgeQuad *quad) = 0;
    virtual hgeVertex*  CALL    Gfx_StartBatch(int prim_type, HTEXTURE tex, int blend, int *max_prim) = 0;
    virtual void        CALL    Gfx_FinishBatch(int nprim) = 0;
    virtual void        CALL    Gfx_SetClipping(int x=0, int y=0, int w=0, int h=0) = 0;
    virtual void        CALL    Gfx_SetTransform(float x=0, float y=0, float dx=0, float dy=0, float rot=0, float hscale=0, float vscale=0) = 0; 
 
    virtual HTARGET     CALL    Target_Create(int width, int height, bool zbuffer) = 0;
    virtual void        CALL    Target_Free(HTARGET target) = 0;
    virtual HTEXTURE    CALL    Target_GetTexture(HTARGET target) = 0;
 
    virtual HTEXTURE    CALL    Texture_Create(int width, int height) = 0;
    virtual HTEXTURE    CALL    Texture_Load(const char *filename, DWORD size=0, bool bMipmap=false) = 0;
    virtual void        CALL    Texture_Free(HTEXTURE tex) = 0;
    virtual int         CALL    Texture_GetWidth(HTEXTURE tex, bool bOriginal=false) = 0;
    virtual int         CALL    Texture_GetHeight(HTEXTURE tex, bool bOriginal=false) = 0;
    virtual DWORD*      CALL    Texture_Lock(HTEXTURE tex, bool bReadOnly=true, int left=0, int top=0, int width=0, int height=0) = 0;
    virtual void        CALL    Texture_Unlock(HTEXTURE tex) = 0;
};
 
extern "C" { EXPORT HGE * CALL hgeCreate(int ver); }
 
 
/*
** HGE Virtual-key codes
*/
#define HGEK_LBUTTON    0x01
#define HGEK_RBUTTON    0x02
#define HGEK_MBUTTON    0x04
 
#define HGEK_ESCAPE     0x1B
#define HGEK_BACKSPACE  0x08
#define HGEK_TAB        0x09
#define HGEK_ENTER      0x0D
#define HGEK_SPACE      0x20
 
#define HGEK_SHIFT      0x10
#define HGEK_CTRL       0x11
#define HGEK_ALT        0x12
 
#define HGEK_LWIN       0x5B
#define HGEK_RWIN       0x5C
#define HGEK_APPS       0x5D
 
#define HGEK_PAUSE      0x13
#define HGEK_CAPSLOCK   0x14
#define HGEK_NUMLOCK    0x90
#define HGEK_SCROLLLOCK 0x91
 
#define HGEK_PGUP       0x21
#define HGEK_PGDN       0x22
#define HGEK_HOME       0x24
#define HGEK_END        0x23
#define HGEK_INSERT     0x2D
#define HGEK_DELETE     0x2E
 
#define HGEK_LEFT       0x25
#define HGEK_UP         0x26
#define HGEK_RIGHT      0x27
#define HGEK_DOWN       0x28
 
#define HGEK_0          0x30
#define HGEK_1          0x31
#define HGEK_2          0x32
#define HGEK_3          0x33
#define HGEK_4          0x34
#define HGEK_5          0x35
#define HGEK_6          0x36
#define HGEK_7          0x37
#define HGEK_8          0x38
#define HGEK_9          0x39
 
#define HGEK_A          0x41
#define HGEK_B          0x42
#define HGEK_C          0x43
#define HGEK_D          0x44
#define HGEK_E          0x45
#define HGEK_F          0x46
#define HGEK_G          0x47
#define HGEK_H          0x48
#define HGEK_I          0x49
#define HGEK_J          0x4A
#define HGEK_K          0x4B
#define HGEK_L          0x4C
#define HGEK_M          0x4D
#define HGEK_N          0x4E
#define HGEK_O          0x4F
#define HGEK_P          0x50
#define HGEK_Q          0x51
#define HGEK_R          0x52
#define HGEK_S          0x53
#define HGEK_T          0x54
#define HGEK_U          0x55
#define HGEK_V          0x56
#define HGEK_W          0x57
#define HGEK_X          0x58
#define HGEK_Y          0x59
#define HGEK_Z          0x5A
 
#define HGEK_GRAVE      0xC0
#define HGEK_MINUS      0xBD
#define HGEK_EQUALS     0xBB
#define HGEK_BACKSLASH  0xDC
#define HGEK_LBRACKET   0xDB
#define HGEK_RBRACKET   0xDD
#define HGEK_SEMICOLON  0xBA
#define HGEK_APOSTROPHE 0xDE
#define HGEK_COMMA      0xBC
#define HGEK_PERIOD     0xBE
#define HGEK_SLASH      0xBF
 
#define HGEK_NUMPAD0    0x60
#define HGEK_NUMPAD1    0x61
#define HGEK_NUMPAD2    0x62
#define HGEK_NUMPAD3    0x63
#define HGEK_NUMPAD4    0x64
#define HGEK_NUMPAD5    0x65
#define HGEK_NUMPAD6    0x66
#define HGEK_NUMPAD7    0x67
#define HGEK_NUMPAD8    0x68
#define HGEK_NUMPAD9    0x69
 
#define HGEK_MULTIPLY   0x6A
#define HGEK_DIVIDE     0x6F
#define HGEK_ADD        0x6B
#define HGEK_SUBTRACT   0x6D
#define HGEK_DECIMAL    0x6E
 
#define HGEK_F1         0x70
#define HGEK_F2         0x71
#define HGEK_F3         0x72
#define HGEK_F4         0x73
#define HGEK_F5         0x74
#define HGEK_F6         0x75
#define HGEK_F7         0x76
#define HGEK_F8         0x77
#define HGEK_F9         0x78
#define HGEK_F10        0x79
#define HGEK_F11        0x7A
#define HGEK_F12        0x7B
#endif

Я научился тэгами закрывающими пользоваться)))
Если как такой реализацией не пользуюсь то может в качестве реализации подойдет HGE hgeRealisation();
C++
1
2
3
4
5
    HGE *hgeRealisation;
    boost::shared_ptr<HGE> hge(new hgeRealisation);
 
    HGE hgeRealisation;
    boost::shared_ptr<HGE> hge(new hgeRealisation());
Не один из способов не работает, может опять что-то неправильно делаю?
0
Maxim Prishchepa
Эксперт С++
1923 / 1035 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
19.01.2013, 17:11 #8
Такой код работает?
C++ (Qt)
1
HGE * ptr = new HGE();
1
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
19.01.2013, 17:17  [ТС] #9
Нет, тоже самое.
..\Source\Phenomen.cpp(24) : error C2259: 'HGE' : cannot instantiate abstract class
C++ (Qt)
1
Работает только: HGE * hge;
Общение происходит через:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
hge = hgeCreate(HGE_VERSION); // Может вот оно?
    hge->System_SetState(HGE_FRAMEFUNC, Frame);
    hge->System_SetState(HGE_RENDERFUNC, Render);
    hge->System_SetState(HGE_TITLE, "Cupboards");
    hge->System_SetState(HGE_WINDOWED, true);
    hge->System_SetState(HGE_USESOUND, false);
    hge->System_SetState(HGE_SCREENWIDTH, 800);
    hge->System_SetState(HGE_SCREENHEIGHT, 600);
    hge->System_SetState(HGE_SCREENBPP, 32);
    if(hge->System_Initiate())
0
Maxim Prishchepa
Эксперт С++
1923 / 1035 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
19.01.2013, 17:34 #10
именно!
C++ (Qt)
1
boost::shared_ptr<HGE> hge(hgeCreate(HGE_VERSION));
1
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
19.01.2013, 18:35  [ТС] #11
После закрытия окна с программой буст выкидывает ошибку (вернее прерывает программу и указывает следующую строчку в качестве точки останова:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    
}
..
    virtual void dispose() // nothrow
    {
#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
        boost::sp_scalar_destructor_hook( px_, sizeof(X), this );
#endif
        boost::checked_delete( px_ ); // <- Вот тут 
    }
 
    virtual void * get_deleter( detail::sp_typeinfo const & )
    {
        return 0;
    }
..
Буст стал указывать на интерфейст которого уже не существует, что можно сделать в таких случаях?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
20.01.2013, 01:20 #12
vbloodv, Эм. Не удалять вручную указатель? Почитать доку про HGE?
1
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
20.01.2013, 02:31  [ТС] #13
Цитата Сообщение от ForEveR Посмотреть сообщение
vbloodv, Эм. Не удалять вручную указатель? Почитать доку про HGE?
Если для того чтобы применять или не применять "умные указатели" я должен читать документацию не в общих чертах, а что где освобождается...

... То разве это УМНЫЕ УКАЗАТЕЛИ. Обычно в такие моменты говорят ты программист и должен %пример любого действия%, но разве они не должны облегчить жизнь, тем что их можно привязывать к чему угодно?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
20.01.2013, 09:25 #14
vbloodv, Чтобы пользоваться чем угодно, нужно знать КАК оно работает (хотя бы в общих чертах). Все конечно круто, однако раз вы создаете не через new HGE(), а через hgeCreate, следовательно должно быть hgeFree или нечто вроде того, который нужно указать вторым параметром в конструкторе shared_ptr.

Добавлено через 4 минуты
Судя по всему уничтожается он через hge->Release(); следовательно пишем простенькую функцию

C++
1
2
3
4
5
6
void release_hge(HGE* ptr)
{
   ptr->Release();
}
 
boost::shared_ptr<HGE> hge_ptr(hgeCreate(HGE_VERSION), release_hge);
1
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
21.01.2013, 14:23  [ТС] #15
Цитата Сообщение от ForEveR Посмотреть сообщение
нужно знать КАК оно работает
- это про то что я говорил )))
Использование двух параметров в shared_ptr не сталкивался, спасибо уже который раз ! Умастил

Добавлено через 23 часа 52 минуты
ForEveR,
Цитата Сообщение от ForEveR Посмотреть сообщение
boost::shared_ptr<HGE> hge_ptr(hgeCreate(HGE_VERSION), release_hge);
- Это абстракция или всё же такое имеет место компилятор VS08 ругается:
Кликните здесь для просмотра всего текста
e:\source\visualstudio2008\project\phenomen\phenomen\source\phenomen.cpp(9) : error C2661: 'boost::shared_ptr<T>::shared_ptr' : no overloaded function takes 2 arguments

На строчки любого типи:
C++
1
2
3
4
5
6
7
void Release_hge(HGE *ptr)
{
    ptr->Release();
}
boost::shared_ptr<HGE> hge(hgeCreate(HGE_VERSION),Release_hge(hge)); // 1
boost::shared_ptr<HGE> hge(hgeCreate(HGE_VERSION),hge-Release()); // 2
boost::shared_ptr<HGE> hge(hgeCreate(HGE_VERSION),HGE::Release()); // 3
0
21.01.2013, 14:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2013, 14:23
Привет! Вот еще темы с ответами:

Скрипт указывающий путь - PHP
Нужен скрипт, который будет отсылать свой путь, т.е где находится сам скрипт на гейт через каждые 3 часа. Например, если скрипт...

Указатель в классе, указывающий на этот же класс - C++
Разбирал чужой код и нашел примерно такую конструкцию: class Sample { public: Sample(); virtual ~Sample(); int Method();...

Google Maps указывающий на адрес моей компании - HTML, CSS
Здраствуйте, делаю сайт (на html) и во вкладке КОНТАКТЫ хочу прикрепить карту Google Maps, которая будет указывать на адрес моей...

Выступ за пределы блока, указывающий на ячейку его вызвавшую - JavaScript
Как грамотно сделать такой вот блок с выступом, указывающим на ячейку, клик по которой его вызвал? Сам блок я сделал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru