2017-03-06 26 views
0

例子:SDL - 使用與SDL_Texture一個std ::矢量不起作用,陣列工作正常

class DefaultTexture 
{ 
public: 
    bool loadFromFile(std::string path); 
    void render(int x, int y); 
protected: 
SDL_Texture* mTexture; 
}; 

main:(...) 
DefaultTexture mCards[2]; 
DefaultTexture X; 
X.loadFromFile("Data/basic_card.png"); 
DefaultTexture Y; 
Y.loadFromFile("Data/basic_card.png"); 
mCards[0] = X; 
mCards[1] = Y; 
mCards[0].render();mCards[1].render(); 

這工作正常(我可以同時看到圖片)如果我使用std :: vector的,而不是我只能見第一個。

std::vector<DefaultTexture> mGG; 
DefaultTexture X; 
X.loadFromFile("Data/basic_card.png"); 
DefaultTexture Y; 
Y.loadFromFile("Data/basic_card.png"); 
mGG.push_back(X); mGG.push_back(Y); 
mGG[0].render(); mGG[1].render(); 

任何人都可以向我解釋爲什麼它不工作? (無論我使用2還是100,我只能看到第一個)

+0

它是一個錯字您的呼叫之一粉刷括號,和其他沒有? (mGG [0] .render; mGG [1] .render();) – JGroven

+0

是的,我忘了在這裏寫下來。 – AutobahnPolizei

+0

使用調試器,你可以驗證數據是否正確地推向矢量?這可能是一個錯誤的複製構造函數的情況。另外,這是實際的代碼?從它的外觀來看,這個錯誤可能會有所不同。 – ZeroUltimax

回答

0

第一個使用=運算符。第二個使用複製構造函數。

可能的解決方案是避免複製。你可以使用指針:)

#include <memory> 

//... 

std::vector<std::shared_ptr<DefaultTexture>> mGG; 

std::shared_ptr<DefaultTexture> X(new DefaultTexture); 
std::shared_ptr<DefaultTexture> Y(new DefaultTexture); 
X->loadFromFile("Data/basic_card.png"); 
Y->loadFromFile("Data/basic_card.png"); 

mGG.push_back(X); 
mGG.push_back(Y); 

shared_ptr reference

+0

謝謝!這是行得通的。(仍然希望沒有指針的解決方案) – AutobahnPolizei

+0

@AutobahnPolizei在這種情況下查看**的規則**對於你的'DefaultTexture'類您需要提供析構函數,複製構造函數和複製賦值構造函數。 –

相關問題