2010-11-08 54 views
-3

++打破我創造了這個類加載網它的工作原理,但我添加了這個新功能,以幫助加快加載。當我打電話給我的程序中斷/停止。
這裏是我的功能C對類功能

bool CXFileEntity::LoadXFile(const std::string &filename, int startAnimation, CXFileEntity *entity, LPDIRECT3DDEVICE9 d3ddev) 
{ 
    // We only support one entity so if it already exists delete it 
    if (entity) 
    { 
     delete entity; 
     entity=0; 
    } 

    // Create the entity 
    entity=new CXFileEntity(d3ddev); 
    if (Load(filename)) 
    { 
     delete entity; 
     entity=0; 
     return false; 
    } 

    SetAnimationSet(startAnimation); 

    return true; 
} 
+0

休息/停止哪裏?在這個函數中?另一個功能? – dreamlax 2010-11-09 00:04:32

+5

題外話:Load載入異常時會發生什麼?你的代碼中有一個'delete',這很糟糕。就像我以前說過的,你需要**停止**並獲得一個初學者不是面向遊戲的C++書籍,並首先學習良好的C++ *。另外,'delete 0;'完全沒問題,上面的所有內容都應該用'delete entity'替換;實體= 0;'。 (儘管如此,它甚至不應該存在;它應該是沿着'entity.reset()'的行,其中'entity'是一個智能指針。) – GManNickG 2010-11-09 00:05:09

+0

您需要提供更多信息。喜歡,當程序崩潰時你會得到什麼錯誤 – thecoshman 2010-11-09 00:07:06

回答

1

編輯:等待......我沒有意識到這個功能是的CXFileEntity類成員。它看起來不像是一種靜態方法。所以爲了調用這個函數,你已經需要實例化一個CXFileEntity對象!因此,很可能是你絕對不希望任何刪除或創建對象CXFileEntity裏面這種方法的。 (如果你真的只允許一個實體同時存在,你就可以有效地刪除「這個」,然後試圖重新創造它,那是不行的,沒辦法,沒怎麼。)

我我希望它能夠爲您提供一些關於指針如何工作的線索。


你會做的更好,以提供更多的信息,例如其中如何的程序中斷。

但是,這顯然是錯誤的:

CXFileEntity *entity, 

,因爲這意味着新的對象由

entity=new CXFileEntity(d3ddev); 

分配將不會被調用者可以看到。 (實體是一個局部變量,所以它的變化將不是本地範圍的外部看到。)

嘗試改變代碼傳遞實體作爲指向指針的指針:

CXFileEntity **entity, 

這將意味着改變函數內的代碼以匹配:

if (*entity) 
{ 
    delete *entity; 
    *entity=0; 
} 

// Create the entity 
*entity=new CXFileEntity(d3ddev); 

// etc. 

您還必須更改調用者以將指針傳遞給指針。爲了良好,請確保您第一次通過指針時,它已初始化爲0:

CXFileEntity *the_entity = 0; 
...