gpt4 book ai didi

c++ - Object(this) != this 设置的 this 指针

转载 作者:行者123 更新时间:2023-11-28 08:25:43 25 4
gpt4 key购买 nike

我引擎的构造函数使用指向自身的指针 (this) 构造音频、视频和输入对象。然而,当我调试时,我看到我构造的所有类的 enginePtr 与调试器提供的 this 的值不同。

当我往里看时,我看到 pRender 的 enginePtr 与引擎有不同的值。其中大部分设置为 NULL,这会导致渲染崩溃。

这是我的引擎构造函数:

cEngine::cEngine( int flag ) {

if ( !al_get_system_driver() ) {

this->isRunning = true;

al_init();

// Uses DirectX by default, uncomment ALLEGRO_OPENGL for OpenGL.
if ( flag == OPENGL_WINDOW || flag == OPENGL ) al_set_new_display_flags( ALLEGRO_RESIZABLE | ALLEGRO_OPENGL );
else if ( flag == DIRECTX_WINDOW || flag == DIRECTX ) al_set_new_display_flags( ALLEGRO_RESIZABLE );
else if ( flag == OPENGL_FULLSCREEN ) al_set_new_display_flags( ALLEGRO_FULLSCREEN | ALLEGRO_OPENGL );
else if ( flag == DIRECTX_FULLSCREEN ) al_set_new_display_flags( ALLEGRO_FULLSCREEN );

this->display = createDisplay( "Motherload C++", -1, -1, 640, 480 );

srand( ( unsigned ) time(0) );

pCam = new cCam( this );
pIO = new cIO( this );
pMap = new cMap( this, setPoint( 50, 50 ), setPoint( 13, 20 ) ); // 13, 20
pPlayer = new cPlayer( this );
pAudio = new cAudio( this );
pRender = new cRender( this );
pEvents = new cEvents( this );

}
}

cRender 构造函数:

cRender::cRender( cEngine* pEngine ) {

this->pPlayerLoc = pPlayerLoc;
this->BLACK = al_map_rgb(30, 100, 200);
this->needsRedraw = false;
this->pEngine = pEngine;

al_init_font_addon();
al_init_ttf_addon();

splitImages();
//this->font = al_load_font( "C:/resource/gisha.ttf", 24, 0 );
//this->img = al_load_bitmap( "C:/resource/rock.png" );
}

谢谢

最佳答案

这不太可能。你的代码在我看来在逻辑上没问题。相反或依靠调试器,尝试打印出“this”的值以及您存储在 pRenderer 中的任何内容。有时,使用优化标志,调试器无法正确显示变量值。

关于c++ - Object(this) != this 设置的 this 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4161138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com