Савва Насыров, речь не про компилятор, а про IDE. Это разное. А если прям выпендриваться, то это ошибки компоновщика, а не компилятора. Ошибки из-за того, что срр файлы с классами EventArg не компилируются вообще, либо объектные файлы куда-то в другое место скомпилировались. Через CMake генерируете файл проекта, открываете его в IDE и видите все свои ошибки создания проекта, каких файлов не хватает и почему не компилируется.
Савва Насыров, Рекомендую испоьзовать какую-нибудь IDE, а не через командную строку собирать. Собирать проекты вручную вам потребуется примерно ноль раз в жизни, не в девятнадцатом веке живём, всё-таки. Под виндоус проще всего в Microsoft Visual Studio. Community Edition бесплатная с офф.сайта скачивается. Там любой пример или туториал посмотри и будет понятно, как добавлять файлы в процект, как компилировать, отлаживать и прочее.
Савва Насыров, Я не пользуюсь mingw, не знаю тонкостей сборки. По кодам ошибки видно, что срр файлы с EventArgs не компилировались. А судя по первой строчке, компилируется только файл terminal.cpp. А надо, чтобы компилировались все срр файлы.
Савва Насыров, деструктор теперь правильный!
static переменные надо в срр файл добавить. В хэдере только их объявления в классе. Инициализацию (вне класса) надо в срр файл перенести.
Савва Насыров, Код классов не пишется в заголовке. Это ты так написал. В хэдере нужно писать определение класса, а реализацию в срр файле. То есть в хэдере только объявление функций должно быть.
pluspwnz, И тебе спасибо за приятные слова :)
Но у этого решения есть минусы. Некотоыре античиты считают любые макросы читерскими программами и может из игры выкинуть. Перед запуском стимовских игрушек может потребоваться или выключать макросы или вообще закрывать программу. Это если будут проблемы с античитом.
Хочешь - поднимай, не хочешь - не поднимай. Вот коммиты лучше для каждой фичи делать отдельно, а не пачкой.
По идее, каждый релиз дистрибутива лучше делать с разной версией, чтобы пользователи могли понять, что нужно обновиться.
Очень подозреваю, что инициализация строк пытается выполниться до инициализации рантайм библиотек, поэтому строки не отрабатывают. Если сделаешь их членами класса Info (не статическими) и инициализируешь в get_instance, аналогично объекту Core, то 100% проблем не будет, потому что не будет уже никаких зависимостей ни от чего. Заодно уберёшь глобальные переменные - сплошные плюсы!
Могу ошибаться, но порядок инициализации глобальных статических переменных не определён. То есть строки могут создасться до VER_MAJOR.
в остальном вроде extern правильно используется и должно бы работать.
VPN нужен общесистемный, не для браузера. Сперва надо скачать инсталлятор, а потом инсталлятор будет выкачивать выбранные компоненты и он тоже IP проверяет. Для обновления тоже нужен будет VPN. Для программирования Qt и запуска приложений VPN не нужен, там уже нигде не проверяется. Только при скачивании, установке и обновлении через Maintanance Tool.
Раньше можно было скачать оффлайн инсталлятор, может на торентах кто-нибудь добрый выложил, если и сейчас есть такое. Там уже VPN не нужен будет.
Купи (скачай) любой учебник по С++ для студентов. Там в конце каждог ораздела есть вопросы и задачи для самопроверки. Если не можешь их решить, то знаний очень недостаточно.
sfml скачать с оффициальног осайта. Гуглить по слову sfml.
Qt из России и Беларуси сейчас скачать невозможно, нужен VPN. Если ты не в России, то без проблем с официального сайта скачаешь. Гуглить по слову Qt.
Судя по "ИЛИ" между Qt и SFML, вы не определились, зачем оно вам нужно и что собрались делать...
Павел Дорофеев, Ну вопрос не в исходникак и не в отладчике. Через QAbstractEventDispatcher::installNativeEventFilter можно сделать, но это корявое платформо-зависимое решение. Интересует родное Qt решение, без привязки к платформе или каких-то полу-хакерских трюков.
Acaunt, Хуже :)
Исходный вариант хороший, но только если держать в уме, что лучше так не делать, если не уверен.
Любые статические объекты создаются в неизветсном программисту порядке, установленном компилятором. А вот при испоьзовании Синглтона, объект создаётся при первом вызове instance. Плюс можно контроллировать время жизни и "оживлять" объект даже после вызова деструктора, если понадобится.
Acaunt, Лучще не делать глобальных переменных без использования синглтона. Неизвестно, в каком порядке они будут созданы и удалены (зависит от порядка сборки).
И реализация внутри класса не всегда хорошо - это равнозначно объявлению inline.
std::cout реализованы ещё более "неприятным" способом с созданием кучи статических переменных, но там код очень хитрый.