12

以前はmath.hで問題なく作業していました。ここで、それ自体に。というファイルmath.hがあり、が含まれている外部ライブラリを使用します< cmath>

このライブラリをプロジェクトに追加する(またはコードに触れることなくインクルードディレクトリを追加するだけでも)と、次のようなエラーが大量に発生するようになりました< cmath>

C:\ Program Files \ Microsoft Visual Studio 8 \ VC \ include \ cmath(18):エラーC2039:'acosf':'`グローバル名前空間''のメンバーではありません

C:\ Program Files \ Microsoft Visual Studio 8 \ VC \ include \ cmath(18):エラーC2873:'acosf':シンボルをusing宣言で使用できません

C:\ Program Files \ Microsoft Visual Studio 8 \ VC \ include \ cmath(18):エラーC2039:'asinf':'`グローバル名前空間''のメンバーではありません

C:\ Program Files \ Microsoft Visual Studio 8 \ VC \ include \ cmath(18):エラーC2873:'asinf':シンボルをusing宣言で使用できません

[など...]

なぜこれが起こるのかわかりません。Visual Studio 2005を使用していて、インターネットを調べていますが、この問題はVS 2008で解決されているようです。ただし、VS2005を使い続けたいと思います...

どこにでもインクルードusing namespace std;したり、インクルードの順序を変更しても何も変わらないようです。定義_STD_BEGINするとエラーは解決しますが、で生成され< xlocinfo>ます。

これはどのように解決できますか?

4

4 に答える 4

6

あなたの質問を正しく読んだかどうかはわかりませんが、ライブラリが独自の math.h ファイルを出荷するのは奇妙に思えます。

<my_lib/math.h>おそらく、コンパイラと競合することなくインクルードできるように、インクルード パスに親ディレクトリを配置すると思われます<math.h>か?

于 2010-10-21T01:18:07.737 に答える
0

おそらく問題は、C ライブラリと C++ 規則が混在していることです。例えば:

#include <math.h>
namespace TEST {
}

これは正常にコンパイルされますが、次のようになります。

namespace TEST {
  #include <math.h>
}

これにより、多数のスプリアス エラーが生成されます。

問題を混乱させるだけです:

#include <math.h>
namespace TEST {
  #include <math.h>
}

これも、1 回 (初回) しかインクルードできないため、コンパイルされます。

したがって、次のこともできます。

#include <math.h>
namespace TEST {
  #include "SomethingThatIncludesMath.h"
}

動作しますが、次の場合:

namespace TEST {
  #include "SomethingThatIncludesMath.h"
}

しません。

C++ ヘッダーを *.cpp ファイルではなく *.c ファイルに含めることによっても、同様の問題が発生する可能性があります。

C と C++ の他の同様の混合が同様の問題につながる可能性があると確信しています。

于 2013-02-06T12:25:01.397 に答える
0

(1) Microsoft によると、C2873 は次のことを意味します。

'symbol' : シンボルは using 宣言では使用できません using ディレクティブにネームスペース キーワードがありません。これにより、コンパイラはコードを using ディレクティブではなく using 宣言として誤って解釈します。

(2) また、C2873 と C2039 (CEF3 と Cinder をマージしようとしました) を使用した場合、Properties->Configuration Properties->C/C++->Code Generation を変更することで、両方のエラーを回避しました。

最小限の再構築を有効にする: はい (/Gm)、C++ 例外を有効にする: はい (/EHsc)、関数レベルのリンクを有効にする: 空

于 2016-02-18T06:34:26.250 に答える