В 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. Я бы предположил, что это может произойти в любое время, когда проект был перемещен между платформами, так что стандартные заголовки библиотек расположены по-разному.