2013-03-13 46 views
0

我創建了一個類,並在Functions.h標題中有一些外部方法(認爲這是問題)。無論如何,當我嘗試在類實現文件中使用任何類型的C風格函數時,即使是空白的,我得到一個編譯器/ liker錯誤。我對此很陌生,不明白問題在哪裏。我想我不能使用.h文件,但我可以在類文件中使用全局變量和指令。Objective C錯誤:類實現中的C風格方法?

我想在哪裏宣佈我的外部功能?在什麼樣的文件?

+1

你能告訴我們一些你的代碼嗎?這樣我們可以給出更有針對性的答案。 – JonathanC 2013-03-13 18:13:09

+1

請修改您的問題以包含導致錯誤的代碼以及您收到的確切錯誤消息。 – 2013-03-13 18:16:39

+0

我以後加載它,但是它的c風格函數示例 void punchSound() {0} {0} {0}} {} {AudioServicesPlaySystemSound(sIDPunch); } 即時通訊試圖把它放在這兒 在視圖控制器實現類 - (IBAction爲)衝 {// punchSound(); } c風格函數在.h文件中不能確定它是如何設置的: – 2013-03-13 18:26:47

回答

2

您有c++作爲標籤。也許這些函數是C++函數,但是你想從Obj-C文件中獲取它們?如果是這種情況,您需要將它們轉換爲C函數,或者您需要使用Obj-C++(其擴展名爲.mm而不是.m)。

+0

中取消註釋c樣式函數後得到的代碼。重複的符號_punchSound位於: /Users/helloagain/Library/Developer/Xcode /DerivedData/Fight_1.0-evogqjuhjykmcwafbkdtamyziszv/Build/Intermediates/Fight 1.0.build/Debug-iphoneos/Fight 1.0.build/Objects-normal/armv7/ViewController.o /Users/helloagain/Library/Developer/Xcode/DerivedData/Fight_1.0-evogqjuhjykmcwafbkdtamyziszv/Build/Intermediates/Fight 1.0.build/Debug-iphoneos/Fight 1.0.build/Objects- normal/armv7/Player.o ld:結構armv7的10個重複符號 clang:錯誤:鏈接器命令失敗,退出代碼1(使用-v查看調用) – 2013-03-13 18:33:11

+0

@ Thankmelater23:您已經定義了兩次函數。你是否可以將標題放在標題中,而不是標記爲內聯? – 2013-03-13 18:42:54

+0

是的,我創建了一個原型,然後在同一個文件中定義它,但我並沒有內聯它。這是問題嗎? – 2013-03-13 23:10:32

3

我的猜測是你完全定義了頭文件中的函數(包括實現),並且包含了來自多個源文件的函數;並且,你忘了描述錯誤說說「多重定義」或「重複的符號」:

// Header file 
void some_function() { 
    // do some stuff 
} 

如果是這樣的話,你需要要麼定義移動到一個源文件,只留下聲明在報頭,所以它們只具有單一的定義:

// Header file 
void some_function(); 

// Source file 
void some_function() { 
    // do some stuff 
} 

聲明定義inline,這允許它們被包括在多於一個的源文件:

// Header file 
inline void some_function() { 
    // do some stuff 
} 

如果這不是問題,請發佈一些示例代碼和錯誤消息,以便我們不必猜測發生了什麼。

+0

謝謝邁克生病了吧。我應該使用什麼源文件擴展名?我會玩它,但我應該使用.mm或.m或什麼?至於指令有什麼特別的,應該或不應該在那裏。這是我的頭文件 – 2013-03-14 07:44:30

+0

@ Thankmelater23:如果它是Objective-C++,那麼'.mm'是傳統的源文件擴展名;普通的C++通常是'.cpp',儘管你可能會看到'.cxx','.cc'甚至'.C'。我不太瞭解目標語言來回答其他問題。 – 2013-03-14 08:14:22