2017-06-23 37 views
3

我已經在一個單獨的頭文件中編寫了一個自定義結構體。它看起來是這樣的Objective C - 自定義struct'make'方法類似於CLLocationCoordinate2DMake

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

現在我想打一個自定義的「讓」的方法,類似於CoreLocation結構CLLocationCoordinate2 CLLocationCoordinate2DMake方法。

我試過兩種不同的方法。儘管這兩種方法在.h文件中都沒有出現錯誤,但是當我想使用make方法時,我確實遇到了錯誤。

方法1:

extern RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData); 

拋出:

蘋果的Mach-O鏈接

「_RequestSpecificsMake」,從引用:

錯誤鏈接器命令失敗與退出代碼1(使用-v看調用)

方法2:

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

拋出:

蘋果Mach-O的接頭

錯誤鏈接命令失敗退出代碼1(使用-v查看調用)

用例:

RequestSpecificsMake(NO, NO) 

我已經檢查了所有common solutions爲蘋果馬霍-鏈接錯誤,但似乎沒有任何工作或解決方案是不相關的。

那麼如何正確地實現結構的'make'方法?

回答

1

你爲什麼不嘗試的

static inline代替extern

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

,或者如果你想使用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關鍵字不是必需的。

相關問題