XcodeでC ++クラスをコンパイルする:コンパイル中のエラー:STLベクトル
質問
GCCとLinuxとVisual Studioの未亡人に正常にコンパイルするC ++クラスがあります。
boid.h:
#ifndef BOID_CLASS_HEADER_DEFINES_H
#define BOID_CLASS_HEADER_DEFINES_H
#include "defines.h"
class Boid {
public:
// Initialize the boid with random position, heading direction and color
Boid(float SceneRadius,float NormalVel);
.....
protected:
...
};
#endif
とboid.cppで:
#include "Boid.h"
// Initialize the boid with random position, heading direction and color
Boid::Boid(float SceneRadius,float NormalVel)
{
....
}
ただし、Xcodeでこのコードをコンパイルすると、次のエラーが発生します。
Compiling Boid.h: "error: vector: No such file or directory"
何か案は? C/C ++コードを撮影して、問題なくXcodeでコンパイルできると思いましたか?
ありがとう
編集: :defines.h(サンプルに#endifも追加しましたが、それは元のコードにありました)
編集2: :いくつかのCOMMENTINCEが空っぽであることをコメントした後、別のエラーが発生しています。上記のベクトルエラー。
#ifndef BOID_NAV_DEFINES_H
#define BOID_NAV_DEFINES_H
#include <stdlib.h>
#include <vector>
#include "Vector3d.h"
#include "Point3d.h"
#include "win_layer.h"
#endif
解決
C ++ヘッダーを.mファイルに含めていますか?
.mファイルは、Objective-C拡張機能を備えた.cファイルとして扱われます。
.mmファイルは、Objective-C拡張機能を備えた.cppファイルとして扱われ、Objective-c ++と呼ばれます
任意の.mファイルを.mmに変更するだけで、右クリックまたはctrlクリックして、xcodeのファイルの名前を選択します。
他のヒント
.mを.mmに変更せずに変更せずに、プロジェクトをクリックした場合は、[タゲット]をクリックしてください - > [設定]のビルドはずっと下に移動します 「LLVM GCC 4.2-言語」 (新しいXcodeは言います 「AppleLLVMコンパイラ4.2」)あなたは見るでしょう ソースを編集します その値を変更します Objective-C ++;
C ++としてコンパイルしていることを確認してください。 xcodeのファイルを右クリックして選択します 情報を取得 そして、それを確認してください ファイルの種類 に設定されています sourcecode.cpp.cpp 実装ファイル用。
これが役立つことを願っています。 Xcodeをバージョン10に更新した後、<Map>や<Vector>ライブラリなどの問題が発生しました。プロジェクトのビルド設定(ターゲットのビルド設定)でC ++ライブラリタイプを変更することにより、簡単なソリューションを見つけました。
C ++標準ライブラリ:LIBC ++(C ++ 11サポートを備えたLLVM C ++標準ライブラリ)
問題なくコンパイルされました。
間違いなく、定義の何かがクラスの定義に影響しています。
この問題には2つのエラーがありました。
- 私の含まれている1つは、コンパイルエラーを引き起こしたタイプミスを持っていました
- 発見されていないエラーが見つかったベクトルは、.mファイルによって.mmに固定されました。
OS X XCodeについて話していると仮定すると、GCCを使用して実際のコンパイルを行います。したがって、GCCの異なるバージョン以外に、それとLinuxの間に違いはないはずです。
ここで私に飛び出す最初のことは、「boid.h」をファイルの名前として入力したが、「boid.h」が含まれていることです。タイプミスではないと仮定すると、LinuxとOS Xの両方にトラブルを引き起こすと思います。
新しい質問に答えるために編集:うーん...ベクトルは間違いなくXcodeの一部です: /Developer/SDKs/MacOSX10.5.sdk/usr/include/c++/4.0.0/vector
私のマシンで。
さらに考えてみると、LinuxビルドからソースとMakeFilesをMacに移植すると、おそらくLinuxで行うようにコマンドラインからコンパイルすることができます。
貼り付けを忘れたかどうかはわかりませんが、未終端の#ifndefがあります
中身 defines.h ?
編集: あなたは解決策を見つけたようです。もう1つの発言:
#include <stdlib.h>
C ++については、次のようにしてください。
#include <cstdlib>
:d