2013-03-13 20 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