2017-06-23 9 views
3

私は別のヘッダファイルにカスタム構造体を書きました。それは今、私はCoreLocation構造体CLLocationCoordinate2 CLLocationCoordinate2DMake方法と同様のカスタム「作る」方法を、作りたい、この目的C - CLLocationCoordinate2DMakeに似たカスタム構造体 'make'メソッド

typedef struct RequestSpecifics { 
    BOOL includeMetaData; 
    BOOL includeVerboseData; 
} RequestSpecifics; 

ようになります。

私は2つの方法を試しました。どちらの方法も.hファイルにエラーを表示しませんが、makeメソッドを使用するときにエラーが発生します。

方法1:

extern RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData); 

例外:から参照

アップルマッハOリンカ

"_RequestSpecificsMake"、:

エラーリンカコマンドが失敗しました終了コード付き1方法2

を(呼び出しを参照するには、-vを使用):

extern RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData) { 
    RequestSpecifics specifics; 
    specifics.includeMetaData = includeMetaData; 
    specifics.includeVerboseData = includeVerboseData; 
    return specifics; 
} 

例外:

アップルマッハOリンカ

エラーリンカコマンドが失敗しました終了コード1で(呼び出しを見るために-vを使用)

使用例:

RequestSpecificsMake(NO, NO) 

私はアップルマッチョ - リンカーエラーのためにすべてのcommon solutionsをチェックしましたが、何も動いていないようにみえまたは溶液は関係ありません。

したがって、構造体の 'make'メソッドを正しく実装するにはどうすればよいですか?

答えて

1

は、なぜあなたは代わりにextern

static inline RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData) { 
    RequestSpecifics specifics; 
    specifics.includeMetaData = includeMetaData; 
    specifics.includeVerboseData = includeVerboseData; 
    return specifics; 
} 

static inlineを試したり、externを使用したい場合は、あなたがの.mファイルに記述する必要がいけません。

2

明らかに、方法2は実装であり、それは.hファイル内にあるべきではありません。当然、.mファイルも必要です。

.hファイル

RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData); 

.mファイル、私は両方の方法を組み合わせる必要があった最後に

RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData) { 
     RequestSpecifics specifics; 
     specifics.includeMetaData = includeMetaData; 
     specifics.includeVerboseData = includeVerboseData; 
     return specifics; 
    } 

:これはそれを行うための正しい方法でなければなりません!また、その外観では、externキーワードは必要ありません。