7

<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。ソースコードの内部を調べcmathたところ、グローバルに定義された対応する数学関数を参照しています。math.h が見つからないという別のエラーが発生します。math.h::acos::acosmath.h

ソースコードは次のとおりです。

ライブラリLAFMath.cp:

#include "libraryLAFMath.h"

ライブラリLAFMath.h:

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

今、私は外部ソースからの別のプロジェクトを使用cmathしてコンパイルしています。これら 2 つのプロジェクトのビルド設定を比較してみましたが、ほとんど同じです。私はLLVM GCC 4.2コンパイラを使用していますが、GCC 4.2を使用すると同様の結果が得られるため、コンパイラ設定の問題ではないと思います。

私は Xcode 開発に不慣れで、助けていただければ幸いです。

4

2 に答える 2

13

私のプロジェクトMath.hには大文字のという名前のファイルがありM、コンパイラが混乱して.Math.hmath.h

于 2010-10-15T07:04:28.697 に答える
2

この回答をトピックの別のスレッドに投稿しましたが、ここにも含める価値があると考えました。

私はこの問題を抱えていました - それは私を夢中にさせていましたが、原因を突き止めました.

この場合、一般的な cmath ヘッダー (または math.h - C++ または C で発生するエラーと解決策) には、アーキテクチャ固有の数学サブヘッダーを含めるためのアーキテクチャ環境スイッチがありました。アーキテクチャ スイッチ (環境変数) が定義されていなかったため、数学関数を真に定義したヘッダーがパントされ、実際には含まれていませんでした。

したがって、確かに単一の math.h または cmath.h があり、それが含まれていましたが、数学関数を取得するにはそれだけでは不十分でした。私の場合、アーキテクチャ変数を定義するのではなく、代わりに正しいサブ数学ヘッダーの場所を見つけて、コンパイル パスに追加しました。その後、プロジェクトは成功しました!

これは、Linux プロジェクトを OS-X に移植する際によく発生する問題のようです。標準ライブラリのヘッダーの配置が異なるように、プロジェクトがプラットフォーム間で移動されたときにいつでも発生する可能性があると思います。

于 2013-09-23T20:13:54.813 に答える