2010-03-05 126 views
1

這是一個SDL問題,但是我有強烈的感覺,我遇到的問題與SDL無關,但更多地與C++ /指針有關。C++:無法直接實例化指針

爲了使長話短說,這個代碼不起作用(編輯以展示我真的):

player->picture = IMG_Load("player"); 
SDL_BlitSurface(player->picture, NULL, screen, &pictureLocation); 

我在屏幕上看到什麼。然而,當我這樣做,它的作品:

SDL_Surface* picture = IMG_Load("player.png"); 
player->picture = picture; 
SDL_BlitSurface(player->picture, NULL, screen, &pictureLocation); 

我可以看到小傢伙就好。

真正的問題是我無法直接實例化Player :: picture。即使當我嘗試

picture = IMG_Load("player.png") 

在player.cpp中,我結束了一個空指針。

+0

請顯示演示問題的最短* COMPLETE *代碼片段 – 2010-03-05 05:41:58

回答

3

我很愚蠢。結果就像我每次試圖在Player :: picture中存儲表面時都忘記了文件擴展名「.png」,並且每當我在main.cpp中聲明的SDL_Surface中進行攪動時,都會方便地記住添加它。

我曾有過這樣的感覺,我只是在眺望東西真的簡單,但這只是尷尬。什麼是適當的懲罰呢?

+0

:)不需要處罰。但其他答案是正確的,你應該檢查null的結果並正確處理,而不是讓它從null中崩潰。除非你爲簡潔而省略。無論如何,因爲這是答案,請點擊旁邊的綠色複選標記。 – GManNickG 2010-03-05 19:23:10

+0

我還沒有註冊,因此我需要等待兩天才能夠標記出答案。 – aheld 2010-03-07 12:45:40

0

什麼數據類型是player-> picture? IMG_Load返回什麼類型?除非涉及類型轉換,否則很難想出在臨時變量中保存表達式會改變結果的情況。

而且我不會調用這個指針實例化。你正在實例化一些圖片類型的實例並存儲一個指向它的指針。

+0

IMG_Load返回SDL_Surface *,而player->圖片也是SDL_Surface *。我想如果它不是全部相同的類型,我會得到一個編譯器錯誤。 – aheld 2010-03-05 05:50:03

0

這就是爲什麼你要經常檢查,看看有什麼IMG_Load()返回...

SDL_Surface* picture = IMG_Load("player.png"); 
if (picture == NULL) { 
    // there was obviously some sort of error. 
    // what does SDL_GetError() say? 
} 

一些SDL函數返回-1,如果出現錯誤。只需檢查文檔,並確保你正在檢查你的函數返回。這些步驟使調試更容易。