1

簡単な質問:

私はたくさんのCヘルパールーチンを作成し、それらをプロジェクトに含めようとしています。私は次のようなもので大丈夫だと思っていました。

MyFuncs.h

typedef struct
{
    float n;
} MyStruct;

float Operation(MyStruct ms);

MyFuncs.m

#import "MyFuncs.h"

float Operation(MyStruct ms)
{
    return ms.n * ms.n;
}

ただし、「アーキテクチャi386の未定義のシンボル」および「xから参照されるOperation(MyStruct)」というリンカーエラーが発生します。

ヘッダー/実装Cファイルを機能させるためにセットアップする必要がある他の方法はありますか?

注:これは、Xcode4.5を使用するiOSプロジェクト用です。

4

3 に答える 3

3

いいえ、純粋なCを使用しても問題はありません。通常、ソースファイルには*.cの代わりに名前が付けられますが、名前を*.m変更してもエラーは発生*.c*.mません。

ただし、手がかりがあります。

Operation(MyStruct)から参照x

リンカが関数パラメータのタイプを知っている場合、それはC++コードから関数を呼び出しているためです。extern "C" { ... }次のようにヘッダーを挿入する必要があります。

#ifdef __cplusplus
extern "C" {
#endif

typedef struct
{
    float n;
} MyStruct;

float Operation(MyStruct ms);

#ifdef __cplusplus
}
#endif

プロジェクトにC++(Objective-C ++*.mmファイルを含む)がない場合、これは問題ではありません。

于 2012-10-18T17:49:15.583 に答える
0

純粋なcの場合は、「MyFuncs.m」ではなく「MyFuncs.c」の方が適しています。

于 2012-10-18T17:49:20.950 に答える
-4

MyFuncs.mmのように拡張子が.mmの実装ファイルを呼び出します。

于 2012-10-18T17:47:49.717 に答える