• Внимание!!! Правила раздела.

    В связи с постоянными повторениями одних и тех же вопросов, что приводит к лишнему флуду и усложнению поиска нужной информации, мы вынуждены ввести жесткую премодерацию с истекающими из нее последствиями.
    Уважаемый Гость перед тем как задать свой вопрос, настоятельно рекомендуем, прочитать содержимое темы. Скорее всего на вопрос уже дан ответ. Поголовное не желание читать уже сушествующие сообщения и задавать один и тот же вопрос по сотому разу вынуждает нас принять эти меры. За неоднакратно заданные одинаковые вопросы будут выдаватся предупреждения, вплоть до перманентных банов.

Универсальный Ошибки компиляции

Sergei1221

Залетный
Новичок
Регистрация
21 Авг 2019
Сообщения
11
Оценка реакций
8
Баллы
3
Возраст
38
Местоположение
Москва
Недавно собирая ядро для 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 КБ Просмотры: 7

WinWoolF

Верховный Вождь
Команда форума
Администратор
Регистрация
13 Окт 2013
Сообщения
4.858
Оценка реакций
542
Баллы
165
Возраст
36
Местоположение
99 RUS
Сайт
www.1n-game.ru
Еще одна светлая голова в царстве мрака. Нас становится больше!
 
Вверх Снизу