В xcode при включении cmath получить ошибку:':: acos' не был объявлен и т. д
я получаю следующие ошибки при попытке построить небольшой и простой проект, который включает в себя <cmath>
в Xcode:
cmath: '*' has not been declared
'::acos' has not been declared
In file included from /Xcode4/Projects/libraryLAFMath/Classes/libraryLAFMath.cp
In file included from /Xcode4/Projects/libraryLAFMath/Classes/libraryLAFMath.h
'::acos' has not been declared in /Xcode4/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.1.sdk/usr/include/c++/4.2.1/cmath
...
журнал ошибки, жалуется на все другие математические функции, а также, sin
, pow
и т. д., а не просто acos
. Я заглянул внутрь!--12--> исходный код и он ссылается на глобально определенные соответствующие математические функции из math.h
, ie ::acos
etc. Поскольку корневая ошибка жалуется на несуществование ::acos
можно было бы предположить, что math.h
не может быть найден, но а) он существует, и б) я бы получил другую ошибку, жалуясь, что математика.h не может быть найден.
исходный код выглядит следующим образом:
libraryLAFMath.cp:
#include "libraryLAFMath.h"
libraryLAFMath.h:
#include <cmath>
struct libraryLAFMath {
void test() {
double a = std::acos(0);
}
};
теперь у меня есть другой проект из внешнего источника, который использует cmath
и компилируется нормально. Я попытался сравнить создайте настройки между этими двумя проектами, но они в значительной степени одинаковы. Я использую компилятор LLVM GCC 4.2, но получаю аналогичный результат при использовании GCC 4.2, поэтому я не считаю, что это проблема с настройками компилятора.
я новичок в разработке Xcode, и любая помощь приветствуется.
2 ответов
в моем проекте есть файл с именем Math.h
с уставным капиталом M
, и кажется, что компилятор запутывается и пытается включить Math.h
вместо math.h
.
Я разместил этот ответ в альтернативной теме по теме, но подумал, что стоит включить и здесь:
У меня была эта проблема-это сводило меня с ума, но я выследил причину, и это было немного отличается от того, что я видел, сообщил по этому вопросу.
в этом случае общий заголовок cmath (или math.h-ошибка и решение возникают в C++ или C)имели архитектурные переключатели среды для включения подзаголовков math архитектуры. Архитектура switch (переменная среды) не была определена, поэтому она была punting и фактически не включала заголовки, которые действительно определяли математические функции.
Итак, действительно была одна математика.h или cmath.h, и он был включен, но этого было недостаточно, чтобы получить математические функции. В моем случае вместо определения архитектурной переменной я нашел расположение правильных заголовков sub math и добавил их в свой путь компиляции. Тогда проект сработал!
Это, кажется, проблема, которая возникает при переносе проектов Linux на OS-X. Я бы предположил, что это может произойти в любое время, когда проект был перемещен между платформами, так что стандартные заголовки библиотек расположены по-разному.