我想使用一个集来引用一些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。
答案 0 :(得分:1)
插入到集合中的值不能就地更改,因为该值充当用于所有操作(如插入和搜索)的键。由于这个(* i)将是一个T const,在你的情况下将是const TileObject。如果渲染方法不是const方法,我想,你会得到你看到的错误。 一个选项可能是将渲染方法更改为“const方法”&#39;像
void render(dest, offset, sheet) const {...
如果您无法将该方法设为const,则可能必须检查在前一种方法中填写该集合时是否犯了任何错误。您可能必须创建一个新的TileObject,然后将其插入到std :: set中,并记得在完成后删除。
或者,另一个选择是只使用std :: vector而不是std :: set。