Я пытаюсь настроить pari для использования на C++. Вот пример кода, демонстрирующий мою проблему:
#include <pari/pari.h>
GEN d_field;
d_field = cgeti(5);
GEN upperLimit = exp(sqrt(log(d_field)));
Наряду с другими подобными ошибками для exp и sqrt компилятор выводит: error: no matching function for call to ‘log(long int*&)’. Код VS также выделяет эти функции. Как ни странно, GEN, cget и т. д. работают нормально. Что я делаю не так? Я установил пари через apt-get.
в моем файле CMakeList у меня есть:
...
add_compile_options(-Wall -Wpedantic -Werror -O0 -g -lpari -lm)
...
find_library(PARI_LIBRARY pari)
target_link_libraries(${TName}_${entry_point_name} ${PARI_LIBRARY})
Что я испортил?
Я попробовал изменить флаги в CMakeLists и поискал решение в Интернете, но не смог найти проблемы, похожей на ту, с которой я столкнулся.
что такое log? почему вы ожидаете, что это будет объявлено? Это из pari/pari.h?
exp, sqrt и log являются частью математической библиотеки. Вам необходимо включить заголовок «cmath».
Код не выходит за пределы функции, нет, лол, вроде как забыл добавить его в свой пример... Я компилирую для C++, возможно, поэтому это и происходит. Я хочу использовать exp, sqrt и log из библиотеки pari.





Pari — это библиотека C, которая не поддерживает несколько функций с одним и тем же именем. Вам следует просмотреть документацию Pari и использовать одну из правильных функций из paridecl.h.
Я думаю, что можно составить следующие функции, но вам нужно будет выяснить, какую precицию вы хотите:
GEN gexp(GEN x, long prec);
GEN glog(GEN x, long prec);
GEN gsqrt(GEN x, long prec);
Как я могу это сделать? У меня есть опыт работы с C и C++, но мы не использовали библиотеки C в нашем курсе C++, поэтому я предположил, что это будет работать аналогичным образом, когда я могу включить заголовок pari и просто использовать все функции.
Изменяя имя вызываемой функции (log,sqrt,exp) на другое. См. редактирование.
Действительно ли код находится вне функции? Вы компилируете для C или C++? У них могут быть разные правила, поэтому вам следует выбрать, какое из них вы используете.