#c #templates #sfml #template-meta-programming
#c #шаблоны #sfml #шаблон-метапрограммирование
Вопрос:
Я начинающий программист на C , и я не профессионал. Я так запутался с шаблоном в C .
Я работал с SFML, и я мог создать окно и обработать его. На следующем шаге я решил написать шаблонную функцию для обработки сигнала закрытия, когда он генерируется. но мой код не компилируется. в чем проблема?
#include <SFML/Graphics.hpp>
#include <iostream>
template <typename T>
void EventHandler(Tamp; window) {
std::cout << "Close event is made." << std::endl;
window.close();
std::cout << "Window is closed succesfully." << std::endl;
break;
}
int main()
{
sf::RenderWindow window(sf::VideoMode(512, 512), "SMFL Tutorial", sf::Style::Default);
sf::Event events;
while (window.isOpen())
{
while (window.pollEvent(events))
{
switch (events.type)
{
case events.Closed:
EventHandler(window);
default:
std::cout << "Unkown Events are creating." << std::endl;
break;
}
}
}
return 0;
}
Комментарии:
1. Если вы получили
error: break statement not within loop or switch
или подобную ошибку компилятора as, вам нужно просто удалитьbreak
из EventHandler. разрыв2. Пожалуйста, отредактируйте полное сообщение об ошибке вашего компилятора, это намного упростит помощь.
Ответ №1:
Вам нужно переместить оператор break из вашей функции в case в коммутаторе и правильно использовать sf::Event::EventType
перечисление :
#include <SFML/Graphics.hpp>
#include <iostream>
template <typename T>
void EventHandler(Tamp; window) {
std::cout << "Close event is made." << std::endl;
window.close();
std::cout << "Window is closed succesfully." << std::endl;
/// break; <- From here
}
int main()
{
sf::RenderWindow window(sf::VideoMode(512, 512), "SMFL Tutorial", sf::Style::Default);
sf::Event events;
while (window.isOpen())
{
while (window.pollEvent(events))
{
switch (events.type)
{
case sf::Event::Closed:
EventHandler(window);
break; /// <- To here
default:
std::cout << "Unkown Events are creating." << std::endl;
break;
}
}
}
return 0;
}
Более того, зачем вам нужна шаблонная функция? Ваша EventHandler
функция может использовать ссылку на sf::window
для работы либо с sf::Window
, либо с sf::RenderWindow
:
void EventHandler(sf::Windowamp; window) {
std::cout << "Close event is made." << std::endl;
window.close();
std::cout << "Window is closed succesfully." << std::endl;
}