Суть в том, что когда компилятор видит использование шаблонной функции. он пытается сгенерировать ее код, подставив реальные типы вместо шаблонных параметров. Но cpp файлы компилируются отдельно. И если использование происходит в другом файле, то нужный вариант сгенерирован не будет. Отсюда ошибка линковки. когда объектные файлы (результат компилирования отдельных cpp) склеиваются вместе.
Я бы вам советовал начинать с чего-то более простого. SFML неплохо подходит для изучения. Я не работал с UE, но судя по примерам он слегка меняет плюсы, и скрывает то, как все работает. А на C++ не стоит писать, не понимая что происходит.
Ну и по хорошему, при работе с сотнями соединений стоит использовать какое-то асинхронное API. К сожалению я не большой специалист в Java, но возможно вы потратили всю память и с JVM случилось что-то плохое (странно что все просто не упало). www.mailinator.com/tymaPaulMultithreaded.pdf тут пишут что несколько сотен тредов это предел.
Redwhaler: Из математики стоит вспомнить линал, численные методы, аналитическую геометрию, статистику, теорвер. Не обязательно все сразу, но их знание может когда-нибудь вам пригодиться.
Qt замечательный фреймворк, да и на практике его используют достаточно часто. Плюс у него очень хорошая документация, что тоже полезно при обучении. Советую посмотреть на него еще раз.