2012-01-01 65 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