2013-04-09 71 views
0

我有一個C風格的函數.h文件:將帶C函數的頭文件導入到Xcode proj中?

void myFunc(NSArray *array) { 
    ... 
} 

我想這個函數中的每個文件是可用的,所以我#import "Functions.h"到我的App-Prefix.pch文件。

但是,這給我一個編譯錯誤ld: 38 duplicate symbols for architecture i386。什麼是正確的方法來做到這一點?

回答

2

你不應該在頭文件中實現實際的C函數體,就像你不應該在頭文件中實現Objective-C方法一樣。

myfunc.h

void myFunc(NSArray *array); 

myfunc.m

void myFunc(NSArray *array) { 
     ... 
    } 

很明顯,你也應該在你的頭的頂部添加#ifndef,如果你決定不使用任何Objective-C在myfunc.m中,您可以將它重命名爲myfunc.c

更新:
這樣做的原因是,頭文件是從你的程序(多個文件)的多個入口點內採集。然後你的編譯器有點頭暈,開始想知道你究竟想要什麼函數體想要調用(因爲有多個)。一個更明顯的例子是在一個C文件中聲明兩次相同的函數名。最後,你應該使用頭文件「描述」你的函數(添加文檔和所有這些),然後使用main(.m)或者C文件(.c)來指示編譯器在調用函數時該做什麼。

+0

謝謝,這是解決方案。標題中#ifndef的用途是什麼? – Snowman 2013-04-09 20:02:04

+0

它確保同樣不包含兩次,從而導致問題。例如,當你在文件''bc'''和文件''ch''中包含''ah'''包含''ah'',然後在''bc''中包含''ch'''時,你會包括'「啊」'兩次。只要你定義了相同的函數類型,編譯器並不介意,但只要你使用typedefs,枚舉等,它就會變得非常糟糕。 – elslooo 2013-04-09 20:06:18