Nightmare1
@Nightmare1
Программист

Как исправить ошибку при компиляции C++ кода?

При сборке проекта возникает эта ошибка . Ума не приложу, не знаю как исправить.

../deps/source-sdk-2013/mp/src/public/tier1/utlmemory.h:915:2: note: in expansion of macro ‘COMPILE_TIME_ASSERT’
  915 |  COMPILE_TIME_ASSERT( (nAlignment & (nAlignment-1)) == 0 );
      |  ^~~~~~~~~~~~~~~~~~~
In file included from ../deps/source-sdk-2013/mp/src/public/mathlib/vector.h:30,
                 from ../deps/source-sdk-2013/mp/src/public/datamap.h:15,
                 from ../deps/source-sdk-2013/mp/src/public/tier1/byteswap.h:13,
                 from ../src/Machinarium/Utils/String.cpp:132:
../deps/cryptopp/cryptlib.h: At global scope:
../deps/cryptopp/cryptlib.h:1200:22: error: expected unqualified-id before ‘const’
 1200 |  virtual bool Verify(const byte *digest)
      |                      ^~~~~
../deps/source-sdk-2013/mp/src/public/tier0/dbg.h:372:35: note: in definition of macro ‘Verify’
  372 | #define  Verify( _exp )          (_exp)
      |                                   ^~~~
compilation terminated due to -Wfatal-errors.
make[1]: *** [Garrys Mod 10.make:355: obj/Release/Garrys Mod 10/String.o] Error 1
make: *** [Makefile:51: Garrys Mod 10] Error 2


nightmare@nightmare-desktop:/media/nightmare/2DEDC4C311647F4A/Workspace/cpp.machinarium/projects$ g++ --version
g++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  • Вопрос задан
  • 212 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Mercury13
Программист на «си с крестами» и не только
Тут поцапались макрос Verify в dbg.h и функция Verify в cryptlib.h.
Я бы предпочёл переименовать одно из двух — лучше макрос — а затем разобрать, где должен быть макрос, а где функция.

Виноват определённо разработчик макроса: он назвал его простым и распространённым словом Verify. Функция-то где-то внутри объекта, а макрос заменяет идентификатор Verify на всякую дрянь независимо от того, где этот идентификатор и в каком пространстве имён. Кроме того, подобные макросы принято называть как-нибудь DBG_VERIFY — если только это не макрос совместимости, подменяющий, например, более позднее nullptr в старое NULL.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы