Недавно собирая ядро для BFA 8.0.1 наткнулся на ошибки, поэтому решил высказаться по этому поводу и объяснить насколько все это нестрашно.
Исходники взяты отсюда --
BFASource/BFACoreN
Компилируется с 14 ошибками и 6 предупреждениями
Собственно ошибок там одна, из которой следуют остальные.
Мозгоразрывающая ошибка --
На самом деле исправляется очень просто. Через Обозреватель решений находим класс TaskScheduler,
Ищем в TaskScheduler.h вот это объявление(см. скриншот) --
И дописываем в конец этой строчки квалификатор const чтобы стало вот так --
Пробуем повторно собрать проект common
и вуаля!
Собираем повторно все решение, теперь все должно пройти без ошибок.
Вообще, это видимо самая сложная из ошибок, которые мне пришлось наблюдать.
В основном же это опечатки, SCRAPPABLE вместо SCRAPABLE(это у Ashamane), повторные объявления.
Одну ошибку видел тут на форуме --
Несоответствие вызова --
Объявлению --
Ну и жалоба компилятора типа -- no viable conversion итп...
GUID - глобальный идентификтар, просто число.
А WorldObject* - указатель на объект.
Как и написал компилятор, жизнеспособного приведения между двумя этими типами не существует.
Существует нежизнеспособное через reinterpret_cast, но это явный баг будет.
Как исправить? Да просто убрать это ГУИД к черту --
Вероятность 99.9% что это исправит ошибку компиляции. Программист это писавший просто забыл что должно быть
параметром и вместо указателя на объект, записал параметром идентификатор объекта.
В принципе, ничего сверхъестественного. Можно догататься.
Исходники взяты отсюда --
BFASource/BFACoreN
Компилируется с 14 ошибками и 6 предупреждениями
Собственно ошибок там одна, из которой следуют остальные.
Мозгоразрывающая ошибка --
Код:
Ошибка C3848 выражение с типом "const TaskScheduler::Compare" потеряет некоторые квалификаторы const или volatile при вызове "bool TaskScheduler::Compare::operator ()(const TaskScheduler::TaskContainer &,const TaskScheduler::TaskContainer &)" common C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.22.27905\include\xtree 1705 Сборка
На самом деле исправляется очень просто. Через Обозреватель решений находим класс TaskScheduler,
Ищем в TaskScheduler.h вот это объявление(см. скриншот) --
Код:
bool operator() (TaskContainer const& left, TaskContainer const& right)
И дописываем в конец этой строчки квалификатор const чтобы стало вот так --
Код:
bool operator() (TaskContainer const& left, TaskContainer const& right) const
Пробуем повторно собрать проект common
и вуаля!
Код:
2>common.vcxproj -> C:\wow_repo\bfacn-build\src\common\RelWithDebInfo\common.lib
========== Сборка: успешно: 2, с ошибками: 0, без изменений: 5, пропущено: 0 ==========
Собираем повторно все решение, теперь все должно пройти без ошибок.
Вообще, это видимо самая сложная из ошибок, которые мне пришлось наблюдать.
В основном же это опечатки, SCRAPPABLE вместо SCRAPABLE(это у Ashamane), повторные объявления.
Одну ошибку видел тут на форуме --
Несоответствие вызова --
Код:
player->SendPreparedQuest(creature->GetGUID())
Объявлению --
Код:
void SendPreparedQuest(WorldObject* source)
Ну и жалоба компилятора типа -- no viable conversion итп...
GUID - глобальный идентификтар, просто число.
А WorldObject* - указатель на объект.
Как и написал компилятор, жизнеспособного приведения между двумя этими типами не существует.
Существует нежизнеспособное через reinterpret_cast, но это явный баг будет.
Как исправить? Да просто убрать это ГУИД к черту --
Код:
player->SendPreparedQuest(creature)
Вероятность 99.9% что это исправит ошибку компиляции. Программист это писавший просто забыл что должно быть
параметром и вместо указателя на объект, записал параметром идентификатор объекта.
В принципе, ничего сверхъестественного. Можно догататься.