Рейтинг:2

проблема с созданием проекта C++ с помощью G++

флаг aq

я пытаюсь построить каскад библиотека с использованием G++ 8.3.0. В документации упоминается, что тестировался на G++ 4.7.2. У меня вопрос, нужно ли переходить на 4.7.2? если да, то не могли бы вы сказать мне, как? потому что я пробовал как 4.8 (самая старая версия, доступная в соответствии с командой $ which gcc), так и 8.3.0 для сборки каскада и получил следующую ошибку:

В файле, включенном из ../../include/descore/descore.hpp:104,
                 из ../../include/descore/stdafx.h:38,
                 из Wildcard.cpp:44:
../../include/descore/stltree.hpp:74:34: ошибка: переопределение «struct std::less<_Tp*>»
     шаблон <имя_типа T> структура меньше <T *>
                                  ^~~~~~~~~~
В файле, включенном из /usr/include/c++/8/bits/stl_tree.h:65,
                 из /usr/include/С++/8/набор: 60,
                 из ../../include/descore/descore.hpp:88,
                 из ../../include/descore/stdafx.h:38,
                 из Wildcard.cpp:44:
/usr/include/c++/8/bits/stl_function.h:424:12: примечание: предыдущее определение «struct std::less<_Tp*>»
     struct less<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
            ^~~~~~~~~~
make: *** [Makefile:17: ../../objs/descore/Wildcard.o] Ошибка 1

Или мне следует внести изменения в файлы .hpp? (Моя конечная цель — использовать каскад с G++-11. на Ubuntu 19.10)

Заранее спасибо.

флаг cc
Вам нужно использовать компилятор С++, который будет g++ в Ubuntu, а не gcc.
student_11 avatar
флаг aq
Я отредактировал свой пост. Благодарю. Вы получаете ту же ошибку при использовании команды make?
флаг hr
Для меня использование `g++-4.8` (в Ubuntu 18.04) решает проблему переопределения шаблона (что, я думаю, связано с тем, что код использует собственный код частичной специализации для типов указателей); однако есть дополнительные ошибки на этапе ссылки
флаг hr
... Итак, я получил его для сборки с помощью g++-4.8 через cmake, добавив `descore` в `target_link_libraries`, а затем используя `cmake -DCMAKE_CXX_COMPILER=g++-4.8 -DCMAKE_CXX_FLAGS=-pthread`. Но я не знаю, как заставить его работать с более поздним g++.
student_11 avatar
флаг aq
Спасибо @steeldriver. Раньше я создавал его с помощью Microsoft VS2015. Сначала это не сработало, но после того, как я изменил определения макросов MSC_VERSION в defines.hpp (т.е. #если _MSC_VER
флаг hr
@student_11 *может* быть способ сделать это с помощью g++, однако я не вижу ничего очевидного (например, переключатель компилятора или `#ifdef` в файле `stl_function.h`, который позволил бы включить функциональность выключенный). Возможно, вам потребуется удалить конфликтующий код частичной специализации из проекта. Удачи.
флаг cc
Строки 80-90 файла stltree.hpp дают вам возможность модификации.
student_11 avatar
флаг aq
@ubfun1 спасибо. мы должны закомментировать пространство имен над этими строками, чтобы избавиться от ошибки.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.