XcodeでC ++クラスをコンパイルする:コンパイル中のエラー:STLベクトル

StackOverflow https://stackoverflow.com/questions/534861

  •  22-08-2019
  •  | 
  •  

質問

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top