2012-01-01 56 views
0

首先,新年快乐给任何人在那里阅读!隐式声明和错误在XCode中插入函数

我有一个我正在研究的I-phone应用程序,并希望对从按钮水龙头中调用的IBACTION(GetNextElement)进行增强。我想调用一个函数(get_index_to_use),而不是将代码插入到GetNextElement中。当我在我的SymbolTest.m文件中调用该函数时,我收到警告"implicit declaration of function get_index_to_use"

我上构建一个错误,我没有看到,除非我去到生成结果,我看到以下内容:

Ld的构建/调试-iphonesimulator/elements1.app/elements1正常光盘的i386 /Users/dad/Documents/elements1 setenv MACOSX_DEPLOYMENT_TARGET 10.6 setenv PATH “/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/ sbin:/ sbin“ /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4。 3.sdk -L/Users/dad/Documents/elements1/build/Debug-iphonesimulator -F/Users/dad/Documents/elements1/build/Debug/iphonesimulator -filelist/Users/dad/Documents/elements1/build/elements1 .build/Debug-iphonesimulator/elements1.build/Objects-normal/i386/elements1.LinkFileList -mmacosx-version-min = 10.6 -Xlinker -objc_abi_version -Xlinker 2 -framework Foundation -framework UIKit -framework CoreGraphics -o/Users /爸/文档/ elements1 /建造/调试-iphonesimulator/elements1.app/elements1

未定义的符号: “_get_index_to_use”,从引用: - [SymbolTest GetNextElement:]在SymbolTest.o LD:符号(多个)未发现collect2:ld返回1退出状态

我对SymbolTest.o不熟悉。

我在GetNextElement之前的代码中有我的函数。我试图把它放在SymbolTest.h中。我试图把它放在GetNextElement中,但无法让它工作。我试过了 - 和+。该功能看起来像这样(最终我想改变我如何计算指数,但现在我只是递增它来获得功能工作):

- (void)get_index_to_use { 
    el_tbl_idx++; 
} 

任何帮助,将不胜感激。谢谢。

+0

请张贴一些代码,即动作和get_index_to_use的声明... – 2012-01-01 15:33:27

+0

SymbolTest.o是由编译器生成的目标文件,可能从SymbolTest.m(尽管可能.mm或C或CPP) – 2012-01-01 15:34:15

+0

现在,get_index_to_use是一行代码,直到我可以得到它的工作: - (void)get_index_to_use { \t el_tbl_idx ++; \t \t其他{ \t \t \t get_index_to_use();: } 这就是所谓的在else语句 \t \t \t SymbolEntered.text = nil; \t \t \t ElementName.text = [NSString stringWithCString:elements_table2 [el_tbl_idx] .element_name]; \t \t}; 不知道为什么这篇文章没有在显示器上格式化。在我输入的这个窗口中看起来不错,但是当我发布它时,它们一起运行。 – Rick 2012-01-01 15:40:46

回答

2

这里是你的问题,你已经声明了一个方法,然后试图调用像C函数。

你会想要使用(C风格功能)...

void get_index_to_use (void) 
{ el_tbl_idx++; } 

然后拨打:

get_index_to_use() 

- (void) get_index_to_use 
{el_tbl_idx++; } 

,并呼吁:

[self get_index_to_use]; 

或更一般地:

[someObject get_index_to_use]; 

但坚持命名约定通常是一个好主意,其中之一就是如果你的方法以get开头,它应该是一个getter并返回一些东西。以下看起来更Obj-C。

-(NSUInteger)getIndex { 
    el_tbl_idx+=1; // or ++ or = x+1; 
    return el_tbl_idx; 
} 
+0

非常感谢。我会尝试一下。这是我的第一个电话应用程序,我正在尝试写一个我编写的c程序,并将其作为i = phone应用程序工作,有时会混淆两者。我将尝试遵循Obj-C方法。再次感谢,祝你新年快乐。 – Rick 2012-01-01 15:59:06

+0

有一点需要注意......所有的C在Objective-C中都是有效的......不需要重新发明轮子......唯一需要记住的是任何对象iVars只能在对象(实例)中使用,方法。调用C函数比调用方法快一点。 – 2012-01-01 16:01:43

+0

另外,iPhone,不是我的电话 – kubi 2012-01-01 16:14:17

相关问题