en.cppreference.com/w/cpp/thread/thread/threadint run(); // Имеет тип `int (FirstClass::*)()`. А конструктору `std::thread` нужен или функтор, или глобальная функция.
Перепиши `run()` на статическую и передавай инстанцию объекта `FirstClass` параметром при запуске.
иное решение - использовать лямбду с замыканием на this.
FirstClass::FirstClass() : /* список инициализаторов */ firstClassThread([this](){ run(); }) { }
Имей в виду что поток запустится сразу же после завершения конструктора `std::thread`.
en.cppreference.com/w/cpp/thread/threadThreads begin execution immediately upon construction of the associated thread object (pending any OS scheduling delays), starting at the top-level function provided as a constructor argument.
Буквально, поток запускается сразу после его конструирования.
en.cppreference.com/w/cpp/thread/thread/detachSeparates the thread of execution from the thread object, allowing execution to continue independently.
А вот `detach` ничего с запуском потока, или с самим потоком, не делает, она только сбрасывает состояние объекта потока, обрывает связь между объектом потока и самим потоком.
Может тебе стоит как-то иначе запускать поток, в другое время? Если тебе все таки надо запустить поток в другое время, его в это время и надо конструировать.