Поскольку ваш код, как показано выше, напрямую не вызывает acos()
, возможно, есть ошибка в одном из заголовков, которые вы используете. Похоже, что в одном из заголовков есть некоторый (встроенный) код, который вызывает функцию acos()
, не гарантируя, что функция должным образом объявлена. Это может быть макрос или встроенная функция.
Лучшее решение - обеспечить автономность заголовков - изменить заголовки.
Если это невозможно, то взломать должен включить соответствующий заголовок (#include <cmath>
, вероятно) в исходный код.
Программа может получить доступ к заголовку cmath, ошибка находится в самом заголовке cmath.
В этом случае вам, вероятно, потребуется предоставить глобальную acos()
функцию (по крайней мере, объявление, возможно, определение), которая вызывает std::acos()
:
double acos(double x) { return std::acos(x); }
Просто убедитесь, что это не внутри какого-либо пространства имен - даже анонимного. (Проверьте скомпилированный с G ++ 4.0.1 на MacOS X с предшествующим ему #include <cmath>
. Учитывая, что у вас проблемный заголовок <cmath>
, вам может понадобиться фантазия:
extern double std::acos(double);
double acos(double x) { return std::acos(x); }
#include <cmath>
Это довольно неприятно - вы уверены, что версия вашего компилятора не исправлена?
Есть ли вероятность, что у вас есть '#include <cmath>
' внутри пространства имен?