我正在尝试编译一个 *.cpp 文件:
#include <SFML/Graphics.hpp>
using namespace sf;
int main()
{
RenderWindow window(VideoMode(400, 400), L"New project", Style::Default);
window.setVerticalSyncEnabled(true);
CircleShape shape(100.f,3);
shape.setPosition(100, 100);
shape.setFillColor(Color::Magenta);
while (window.isOpen())
{
Event event;
while (window.pollEvent(event))
{
if (event.type == Event::Closed)
window.close();
}
window.clear(Color::Blue);
window.draw(shape);
window.display();
}
return 0;
}
我将其放入g++ Durak.cpp -o output.exe -I"C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include" -L"C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\lib" -lsfml-graphics -lsfml-window -lsfml-system
控制台,但出现错误:
main.cpp: In function 'int main()':
main.cpp:8:43: error: no matching function for call to 'sf::VideoMode::VideoMode(int, int)'
8 | RenderWindow window(VideoMode(400, 400), L"New project", Style::Default);
| ^
In file included from C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Graphics/RenderWindow.hpp:35,
from C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Graphics.hpp:45,
from main.cpp:1:
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/VideoMode.hpp:61:14: note: candidate: 'sf::VideoMode::VideoMode(sf::Vector2u, unsigned int)'
61 | explicit VideoMode(Vector2u modeSize, unsigned int modeBitsPerPixel = 32);
| ^~~~~~~~~
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/VideoMode.hpp:61:33: note: no known conversion for argument 1 from 'int' to 'sf::Vector2u' {aka 'sf::Vector2<unsigned int>'}
61 | explicit VideoMode(Vector2u modeSize, unsigned int modeBitsPerPixel = 32);
| ~~~~~~~~~^~~~~~~~
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/VideoMode.hpp:52:5: note: candidate: 'constexpr sf::VideoMode::VideoMode()'
52 | VideoMode() = default;
| ^~~~~~~~~
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/VideoMode.hpp:52:5: note: candidate expects 0 arguments, 2 provided
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/VideoMode.hpp:43:23: note: candidate: 'constexpr sf::VideoMode::VideoMode(const sf::VideoMode&)'
43 | class SFML_WINDOW_API VideoMode
| ^~~~~~~~~
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/VideoMode.hpp:43:23: note: candidate expects 1 argument, 2 provided
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/VideoMode.hpp:43:23: note: candidate: 'constexpr sf::VideoMode::VideoMode(sf::VideoMode&&)'
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/VideoMode.hpp:43:23: note: candidate expects 1 argument, 2 provided
main.cpp:13:22: error: no matching function for call to 'sf::CircleShape::setPosition(int, int)'
13 | shape.setPosition(100, 100);
| ~~~~~~~~~~~~~~~~~^~~~~~~~~~
In file included from C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Graphics/Shape.hpp:37,
from C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Graphics/CircleShape.hpp:32,
from C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Graphics.hpp:32:
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Graphics/Transformable.hpp:70:10: note: candidate: 'void sf::Transformable::setPosition(sf::Vector2f)'
70 | void setPosition(Vector2f position);
| ^~~~~~~~~~~
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Graphics/Transformable.hpp:70:10: note: candidate expects 1 argument, 2 provided
main.cpp:18:15: error: no matching function for call to 'sf::Event::Event()'
18 | Event event;
| ^~~~~
In file included from C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/WindowBase.inl:28,
from C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/WindowBase.hpp:617,
from C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/Window.hpp:32,
from C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Graphics/RenderWindow.hpp:36:
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/Event.hpp:306:5: note: candidate: 'template<class TEventSubtype> sf::Event::Event(const TEventSubtype&)'
306 | Event(const TEventSubtype& eventSubtype);
| ^~~~~
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/Event.hpp:306:5: note: template argument deduction/substitution failed:
main.cpp:18:15: note: candidate expects 1 argument, 0 provided
18 | Event event;
| ^~~~~
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/Event.hpp:46:7: note: candidate: 'constexpr sf::Event::Event(const sf::Event&)'
46 | class Event
| ^~~~~
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/Event.hpp:46:7: note: candidate expects 1 argument, 0 provided
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/Event.hpp:46:7: note: candidate: 'constexpr sf::Event::Event(sf::Event&&)'
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/Event.hpp:46:7: note: candidate expects 1 argument, 0 provided
main.cpp:19:32: error: no matching function for call to 'sf::RenderWindow::pollEvent(sf::Event&)'
19 | while (window.pollEvent(event))
| ~~~~~~~~~~~~~~~~^~~~~~~
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/WindowBase.hpp:226:40: note: candidate: 'std::optional<sf::Event> sf::WindowBase::pollEvent()'
226 | [[nodiscard]] std::optional<Event> pollEvent();
| ^~~~~~~~~
C:\Users\dalvo\IT\SFML (MinGW)\SFML-3.0.0\include/SFML/Window/WindowBase.hpp:226:40: note: candidate expects 0 arguments, 1 provided
main.cpp:21:23: error: 'class sf::Event' has no member named 'type'
21 | if (event.type == Event::Closed)
| ^~~~
main.cpp:21:44: error: expected primary-expression before ')' token
21 | if (event.type == Event::Closed)
| ^
我的版本如下:g++ (Rev3,由 MSYS2 项目构建) 13.2.0;SFML-3.0.0。我从 ChatGpt 询问的命令提示符文本行。我从带有指南的网站复制粘贴的代码: https: //habr.com/ru/articles/703500/。其他人成功使用了此代码,但我没有。请帮帮我,我已经研究这个问题好几天了(已经想放弃编程了……)
由于您使用的是SFML3,因此需要进行一些更改。大多数以前具有分别用于获取高度和宽度的重载的函数现在都有一个构造函数或成员函数
sf::Vector2u
,可以获取sf::Vector2f
或类似的,例如void CircleShape::setPosition (Vector2f position)
还有迁移到 SFML3 指南。只需在搜索框中输入
VideoMode
,它就会向您展示如何在 SFML3 中正确进行调用。已修复问题的程序: