10

gcc を使用した Linux およびビジュアル スタジオの未亡人で正常にコンパイルされる 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 で問題なくコンパイルできると思いましたか?

ありがとう

EDIT:defines.hを追加しました(サンプルに#endifも追加しましたが、それは元のコードにありました)

EDIT 2 :いくつかのインクルードをコメントアウトした後、空だった別のエラーが発生しました:上記のベクトルエラー。

#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
4

8 に答える 8

24

C++ ヘッダーを .m ファイルに含めていますか?

.m ファイルは、Objective-C 拡張子を持つ .c ファイルとして扱われます。

.mm ファイルは、Objective-C 拡張子を持つ .cpp ファイルとして扱われ、Objective-C++ と呼ばれます。

任意の .m ファイルの名前を .mm に変更し、右クリックまたは Ctrl キーを押しながらクリックして、Xcode でファイルの名前変更を選択するだけです。

于 2009-02-11T00:29:19.840 に答える
17

.m を .mm などに変更せずに、プロジェクトをクリックすると、tagets->ビルド設定をクリックして、「LLVM GCC 4.2 - 言語」 (新しい xcode には「Apple LLVM コンパイラ 4.2」と表示されます) まで移動します。Compile Sources Asが表示され、その値がObjective-C++に変更されます。

于 2012-05-14T16:51:33.190 に答える
2

C++ としてコンパイルしていることを確認してください。XCode でファイルを右クリックして [情報を見る] を選択し、実装ファイルの[ファイルの種類] がsourcecode.cpp.cppに設定されていることを確認します。

于 2009-02-11T00:23:15.533 に答える
1

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 ビルドから Mac に移植すると、おそらく Linux で行うのとまったく同じようにコマンド ラインからコンパイルできます。

于 2009-02-11T00:32:49.550 に答える
0

貼り付けを忘れたかどうかはわかりませんが、終了していない #ifndef があります

define.hの中身は?

編集:解決策を見つけたようです。もう1つの発言:

#include <stdlib.h>

C++ の場合:

#include <cstdlib>

:D

于 2009-02-11T00:07:06.570 に答える
0

確かに、defines.h の何かがクラス定義に影響を与えています。

于 2009-02-11T00:11:33.097 に答える