Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SDL-使用带有SDL_纹理的std::vector不起作用,数组可以正常工作_C++_Arrays_Vector_Sdl - Fatal编程技术网

C++ SDL-使用带有SDL_纹理的std::vector不起作用,数组可以正常工作

C++ SDL-使用带有SDL_纹理的std::vector不起作用,数组可以正常工作,c++,arrays,vector,sdl,C++,Arrays,Vector,Sdl,例如: 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"); DefaultTex

例如:

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();
std::向量mGG;
默认纹理X;
X.loadFromFile(“Data/basic_card.png”);
默认纹理;
Y.loadFromFile(“Data/basic_card.png”);
管理推回(X);管理推回(Y);
mGG[0]。render();mGG[1]。render();

有人能解释一下为什么它不起作用吗?(无论我使用2还是100,我只能看到第一个)

第一个使用=运算符。第二个使用复制构造函数

一个可能的解决办法是避免复制。您可以使用指针:)

#包括
//...
std::载体mGG;
std::shared_ptr X(新的DefaultTexture);
std::shared_ptr Y(新的DefaultTexture);
X->loadFromFile(“Data/basic_card.png”);
Y->loadFromFile(“Data/basic_card.png”);
管理推回(X);
管理推回(Y);

您的一个渲染调用有paren,而另一个没有paren,这是一种打字错误吗?(mGG[0].render;mGG[1].render();)是的,我只是忘了在这里写下它。您能否使用调试器验证数据是否正确地推送到向量中?这可能是一个行为不端的复制构造函数的例子。还有,这是实际代码吗?从外观上看,这个bug可能有所不同。显然不是。第一个:0x07e507e0{mTexture=0x0344acb8{…}mWidth=175 mHweight=257…}最后一个:0x07e50808{mTexture=0xfdfdfdfd{…}mWidth=0 mHweight=-1896279066…}| | | |最后一个具有奇怪的宽度/高度值(最后一个应该是第二个,因为我只有两个?因此,如果我在“mGG.push|u”(X);mGG[0]之后加载纹理,它也可以工作.loadFromFile(path);“我不明白为什么,但好吧。谢谢!这很有效。(仍然希望找到一个没有指针的解决方案)@autobahnpolize在这种情况下,我看三条规则。对于
DefaultTexture
类,您需要提供析构函数、复制构造函数和复制赋值构造函数。
#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);