2010-10-15 3 views
7

je reçois les erreurs suivantes lorsque vous essayez de construire un petit projet simple qui comprend <cmath> dans Xcode:Dans Xcode en incluant cmath obtenir l'erreur: « :: acos » n'a pas été déclarée, etc

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
...

Le journal des erreurs se plaint également de toutes les autres fonctions mathématiques, sin, pow, etc., et pas seulement acos. J'ai regardé à l'intérieur cmath le code source et il référence les fonctions mathématiques correspondantes globalement définies de math.h, c.-à-d. ::acos etc. Puisque l'erreur de racine se plaint de la non-existence de ::acos on supposerait que math.h ne peut pas être trouvé, mais a) il existe , et b) j'obtiendrais une autre erreur en me plaignant que math.h ne peut pas être trouvé.

Le code source est la suivante:

libraryLAFMath.cp:

#include "libraryLAFMath.h" 

libraryLAFMath.h:

#include <cmath> 
struct libraryLAFMath { 
    void test() { 
     double a = std::acos(0); 
    } 
}; 

Maintenant, j'ai un autre projet à partir d'une source extérieure qui utilise cmath et compile bien. J'ai essayé de comparer les paramètres de construction entre ces deux projets, mais ils sont à peu près les mêmes. J'utilise le compilateur LLVM GCC 4.2, mais j'obtiens un résultat similaire quand j'utilise GCC 4.2, donc ce n'est pas un problème de paramétrage du compilateur je crois. Je suis novice dans le développement de Xcode et toute aide est appréciée.

Répondre

12

Il y a un fichier que j'ai dans mon projet nommé Math.h avec un capital M, et il semble que le compilateur est confus et tente d'inclure Math.h au lieu de math.h.

+0

Modifiez votre question pour ajouter plus de détails, ne répondez pas. –

+2

@Delan, Cela ressemble à une réponse à moi, pas un détail supplémentaire, donc pas de problème ... – bdonlan

+0

Hm, je suppose. Désolé pour ça. –

1

J'ai posté cette réponse sur un fil alternatif sur le sujet, mais il pense qu'il vaut la peine, y compris ici aussi:

J'ai eu ce problème - il me rendait fou, mais je traqué la cause, et il était peu différent de ce que j'ai vu rapporté sur cette question. Dans ce cas, l'en-tête cmath général (ou math.h - l'erreur et la solution se produisent en C++ ou C) avait des commutateurs d'environnement architectural pour inclure des sous-en-têtes mathématiques spécifiques à l'architecture. Le commutateur d'architecture (variable d'environnement) n'avait pas été défini, il était donc en train de rogner et n'incluait pas réellement les en-têtes qui définissaient réellement les fonctions mathématiques. Donc, il y avait en effet un seul math.h ou cmath.h, et il était inclus, mais ce n'était pas suffisant pour obtenir les fonctions mathématiques. Dans mon cas, plutôt que de définir la variable architecturale, j'ai plutôt trouvé l'emplacement des en-têtes de maths corrects et les ai ajoutés à mon chemin de compilation. Ensuite, le projet a fonctionné!

Cela semble être un problème qui survient souvent lors du portage de projets Linux vers OS-X. J'imagine que cela pourrait se produire n'importe quand un projet a été déplacé entre des plates-formes telles que les en-têtes de bibliothèque standard sont arrangés différemment.

Questions connexes