示例:
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 :(得分:0)
第一个使用=运算符。第二个使用copy-constructor。
可能的解决方案是避免复制。你可以使用指针:)
#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);