Ошибки компиляции

Sergei1221

Залетный
Пользователь
Регистрация
21.08.2019
Сообщения
11
Реакции
8
Баллы
0
Возраст
39
Местоположение
Москва
Недавно собирая ядро для BFA 8.0.1 наткнулся на ошибки, поэтому решил высказаться по этому поводу и объяснить насколько все это нестрашно.

Исходники взяты отсюда --
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% что это исправит ошибку компиляции. Программист это писавший просто забыл что должно быть
параметром и вместо указателя на объект, записал параметром идентификатор объекта.

В принципе, ничего сверхъестественного. Можно догататься.
 

Вложения

  • 438,5 КБ Просмотры: 13

WinWoolF

Верховный Вождь
Команда форума
Администратор
Регистрация
13.10.2013
Сообщения
5 016
Реакции
361
Баллы
83
Возраст
37
Местоположение
Los Gatos, CA
Еще одна светлая голова в царстве мрака. Нас становится больше!
 
Верх Низ