cmake 缺少某些重载的SFML方法,而其他方法则正常

piztneat  于 2023-05-17  发布在  其他
关注(0)|答案(2)|浏览(195)

我试图在SFML上构建一个应用程序,并决定自己构建它,而不是使用apt包管理器。我也使用cmake,但我不认为这对我的问题有多大影响:
在我的文件UserInterface.h中,我有#include <SFML/Graphics.hpp>,当我从apt使用SFML-dev时,它工作得很好。编译器告诉我们,很多接受(int x,int y)的SFML方法不存在(同时找到接受sf::Vector 2f的版本)。这些重载方法以前工作得很好。
现在我查看了SFML的source code,实际上找不到重载函数?即使它们在文档中:

void sf::Transformable::setOrigin(float x, float y)

我不明白我哪里做错了。SFML的其余部分似乎都很好。如果没有声明这些重载方法,SFML如何支持它们呢?
这是我在构建时得到的输出:

error: no matching function for call to ‘sf::RectangleShape::setOrigin(int, int)’
  103 |     background.setOrigin(0, 0);
      |                              ^
In file included from /usr/local/include/SFML/Graphics/Shape.hpp:33,
                 from /usr/local/include/SFML/Graphics/CircleShape.hpp:32,
                 from /usr/local/include/SFML/Graphics.hpp:34,
                 from /home/bonkt/dev/digitus/src/UserInterface/UserInterface.h:1,
                 from /home/bonkt/dev/digitus/src/UserInterface/UserInterface.cpp:1:
/usr/local/include/SFML/Graphics/Transformable.hpp:115:10: note: candidate: ‘void sf::Transformable::setOrigin(const Vector2f&)’
  115 |     void setOrigin(const Vector2f& origin);

edit:当将参数(int)转换为float时,它不会工作,所以这不是问题。它也适用于许多其他类似的方法:window.setPosition()window.setScale()
sf::FloatRect()

bejyjqdl

bejyjqdl1#

找到我的答案:我之前使用的apt SFML包一定是SFML的旧版本。几周前,我在他们的github上发现了these合并的拉取请求。SFML决定不需要数字对,因为sf::Vector 2 T的使用与API的其余部分更一致。- 所以我将代码改为使用SF::Vector 2f
我只是有一个非常不幸的时间,因为新的pullrequests合并刚刚5天前。

wh6knrhe

wh6knrhe2#

SFML存储库的master分支是当前正在进行的SFML版本3,而latest official release(此时)是2.5.1
The documentation是最新版本,仍然使用单独的(x,y)作为参数。2.6.x版本(虽然还没有发布)应该遵循几乎相同的文档,没有许多“破坏性”的更改。
SFML 3将引入突破性的变化(从SFML 2版本),并使用(将使用)sf::Vector2<t>作为其xy对,但由于它尚未正式发布(任何东西都可以改变),SFML网站上还没有官方文档。
也就是说,如果您自己从源代码生成文档,它应该是最新的。

相关问题