ошибка компиляции, даже если файл был включен - PullRequest
1 голос
/ 07 августа 2020

Когда я компилирую свой C ++ 11 на Unix, я получаю следующую ошибку: (Несмотря на то, что он отлично работает на clion моего ma c)

-bash-4.2$ g++ -std=c++11 -Wall -Werror -pedantic-errors -DNDEBUG main.cpp utilities.cpp utilities.h Graph.cpp Graph.h Exception.cpp Exception.h Edge.cpp Edge.h Calculator.cpp Calculator.h -o final
/tmp/ccLJAsey.o: In function `inner_load(int, std::string&, Calculator&)':
Calculator.cpp:(.text+0x13aa): undefined reference to `std::regex_iterator<__gnu_cxx::__normal_iterator<char const*, std::string>, char, std::regex_traits<char> >::regex_iterator(__gnu_cxx::__normal_iterator<char const*, std::string>, __gnu_cxx::__normal_iterator<char const*, std::string>, std::basic_regex<char, std::regex_traits<char> > const&, std::bitset<11ul>)'
Calculator.cpp:(.text+0x13b9): undefined reference to `std::regex_iterator<__gnu_cxx::__normal_iterator<char const*, std::string>, char, std::regex_traits<char> >::regex_iterator()'
Calculator.cpp:(.text+0x13d2): undefined reference to `std::regex_iterator<__gnu_cxx::__normal_iterator<char const*, std::string>, char, std::regex_traits<char> >::regex_iterator(std::regex_iterator<__gnu_cxx::__normal_iterator<char const*, std::string>, char, std::regex_traits<char> > const&)'
Calculator.cpp:(.text+0x13e6): undefined reference to `std::regex_iterator<__gnu_cxx::__normal_iterator<char const*, std::string>, char, std::regex_traits<char> >::operator->()'
Calculator.cpp:(.text+0x1419): undefined reference to `std::regex_iterator<__gnu_cxx::__normal_iterator<char const*, std::string>, char, std::regex_traits<char> >::operator*()'
Calculator.cpp:(.text+0x14ae): undefined reference to `std::regex_iterator<__gnu_cxx::__normal_iterator<char const*, std::string>, char, std::regex_traits<char> >::operator->()'
Calculator.cpp:(.text+0x14cd): undefined reference to `std::regex_iterator<__gnu_cxx::__normal_iterator<char const*, std::string>, char, std::regex_traits<char> >::operator->()'
Calculator.cpp:(.text+0x1533): undefined reference to `std::regex_iterator<__gnu_cxx::__normal_iterator<char const*, std::string>, char, std::regex_traits<char> >::operator->()'
Calculator.cpp:(.text+0x1552): undefined reference to `std::regex_iterator<__gnu_cxx::__normal_iterator<char const*, std::string>, char, std::regex_traits<char> >::operator->()'
Calculator.cpp:(.text+0x1586): undefined reference to `std::regex_iterator<__gnu_cxx::__normal_iterator<char const*, std::string>, char, std::regex_traits<char> >::operator->()'

Я включил регулярное выражение, поэтому что вызывает это?

1 Ответ

2 голосов
/ 07 августа 2020

Помните, что C ++ '#include <regex> (или что-то еще, если на то пошло) просто включает (текст, исходный код) файл /usr/include/.../regex / (... будет зависеть от вашей точной установки) в компилируемый файл . Если вы посмотрите на эти файлы, они обычно содержат объявления классов, функций, шаблонов и различных #define s. Код, реализующий все, что находится в другом месте. Большинство материалов в стандартных файлах заголовков находится в стандартной библиотеке C ++, и при компоновке компилятор автоматически добавляет их. Если это не часть стандартных частей, вам, возможно, придется добавить дополнительные библиотеки на этапе компоновки. То, что включено по умолчанию (в некоторой степени), зависит от компилятора, и также возможно, что один компилятор помещает полную реализацию в файл заголовка (через функции inline, макросы и прочее), а другой помещает его в стандартную библиотеку или отдельная библиотека.

...