gpt4 book ai didi

c++ - 变量指针的成员函数没有绘制到 SDL_Surface?

转载 作者:行者123 更新时间:2023-11-28 07:53:28 26 4
gpt4 key购买 nike

我想使用一个集合来引用一些 TileObjects(一个用户定义的类),这样我就可以遍历它们并采取相应的行动,或者找到一个特定的对象并将其删除,等等。

问题是,我想做的一件事是访问成员函数“render”,它采用 SDL_Surface* 并将图像应用于它。在集合之外,这工作正常。但是,使用一组 TileObject* 如下

for(set<TileObject*>::iterator it = tileObjects.begin(); it != tileObjects.end(); ++it){
(*it)->render(dest, offset, tileSheet);
}

表示图像没有出现在屏幕上。我可以使用一组 TileObjects,

for(set<TileObject>::iterator it = tileObjects.begin(); it != tileObjects.end(); it++){
(*it).render(dest, offset, tileSheet);
}

但随后我收到“将‘const Tileset’作为‘this’传递的错误……”,因为我想访问的某些函数更改了值。

在 SDL 中使用指针的成员函数应用表面的正确方法是什么?

如果有帮助,我正在使用 GNU GCC 编译器和 Code::Blocks。

最佳答案

插入到集合中的值不能就地更改,因为该值充当用于所有操作(例如插入和搜索)的键。因此 (*i) 将是一个 T const,在您的情况下将是 const TileObject。如果 render 方法不是你的 const 方法,我想你会得到你看到的错误。您的一种选择是将渲染方法更改为“const 方法”,例如

void render(dest, offset, sheet) const {...

如果您无法将方法设为 const,您可能必须检查在之前的方法中填充集合时是否有任何错误。您可能必须创建一个新的 TileObject,然后将其插入到 std::set 中,并记得在完成后删除。

或者,另一种选择是只使用 std::vector 而不是 std::set。

关于c++ - 变量指针的成员函数没有绘制到 SDL_Surface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13231533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com