gpt4 book ai didi

c++ - 编译器错误 ‘NonCopyable::NonCopyable(const NonCopyable&)’ 是私有(private)的

转载 作者:行者123 更新时间:2023-11-28 01:04:11 25 4
gpt4 key购买 nike

我的代码无法编译。我究竟做错了什么?我还希望 sf::Windowsf::Input 对象是静态字段。解决此问题的最佳方法是什么?

#include <SFML/Window.hpp>
#include <SFML/Window/Event.hpp>
#ifndef WINDOW_INITIALIZER_H
#define WINDOW_INITIALIZER_H

class WindowInitializer
{
public:
WindowInitializer();
~WindowInitializer();

private:
void initialize_booleans(const sf::Window * const app);

bool m_leftKeyPressed;
bool m_rightKeyPressed;
bool m_upKeyPressed;
bool m_downKeyPressed;

unsigned int m_mouseX;
unsigned int m_mouseY;
};

#endif // WINDOWINITIALIZER_H

void WindowInitializer::initialize_booleans(const sf::Window* const app)
{

sf::Input input = app->GetInput();

this->m_downKeyPressed = input.IsKeyDown(sf::Key::Down);
this->m_leftKeyPressed = input.IsKeyDown(sf::Key::Left);
this->m_upKeyPressed = input.IsKeyDown(sf::Key::Up);
this->m_rightKeyPressed = input.IsKeyDown(sf::Key::Right);

this->m_mouseX = input.GetMouseX();
this->m_mouseY = input.GetMouseY();
}

WindowInitializer::WindowInitializer()
{
sf::Window app(sf::VideoMode(640, 480, 32), "SFML Tutorial");

initialize_booleans(&app);

sf::Event event;

while(app.IsOpened())
{
while(app.GetEvent(event))
{
if (event.Type == sf::Event::Closed)
app.Close();
if ((event.Type == sf::Event::KeyPressed) && (event.Key.Code == sf::Key::Escape))
app.Close();
if (m_downKeyPressed)
std::cout << "down key pressed!";
else if(m_leftKeyPressed)
std::cout << "left key pressed!";
else if(m_upKeyPressed)
std::cout << "up key pressed!";
else if(m_rightKeyPressed)
std::cout << "right key pressed!";
}
}

}

WindowInitializer::~WindowInitializer()
{
delete m_app;
}

我的错误如下:

In file included from /usr/include/SFML/Window.hpp:35:0,
from ../SFML_tutorial/window_initializer.cpp:3:
/usr/include/SFML/System/NonCopyable.hpp: In copy constructor ‘sf::Input::Input(const sf::Input&)’:
/usr/include/SFML/System/NonCopyable.hpp:57:5: error: ‘sf::NonCopyable::NonCopyable(const sf::NonCopyable&)’ is private
/usr/include/SFML/Window/Input.hpp:45:1: error: within this context
../SFML_tutorial/window_initializer.cpp: In member function ‘void WindowInitializer::initialize_booleans(const sf::Window*)’:
../SFML_tutorial/window_initializer.cpp:9:37: note: synthesized method ‘sf::Input::Input(const sf::Input&)’ first required here
../SFML_tutorial/window_initializer.cpp: In destructor ‘WindowInitializer::~WindowInitializer()’:
../SFML_tutorial/window_initializer.cpp:51:12: error: ‘m_app’ was not declared in this scope

最佳答案

错误信息应该很清楚:

  1. 您不能复制 sf::Input。您需要使用引用。

      sf::Input& input = app->GetInput();
  2. 您的析构函数正在删除一个不存在的对象。该变量从未声明过。

关于c++ - 编译器错误 ‘NonCopyable::NonCopyable(const NonCopyable&)’ 是私有(private)的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7239398/

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