2011-05-12 24 views
7

我已經有了一些代碼,我的類從一個超類繼承,並且一切都一直工作到現在。每次嘗試使用任何超類變量時,我都會遇到錯誤,並說它們未聲明(首次在此函數中使用)。這隻發生在我的一個子類中,它看起來和其他人一模一樣。我想知道是否有什麼明顯的我應該知道的(對於Objective-C來說是相當新的)。基本的代碼是一樣 -關於實例變量和超類的奇怪錯誤

@interface mySuperClass : UIViewController { 

BOOL myVar; 

} 

然後 -

@interface mySubClass : mySuperClass { 

} 

@implementation mySubClass { 

-(void)someMethod { 

    myVar = YES; // error here 

} 

@end 

任何幫助非常讚賞 - 如果你需要更多的信息,讓我知道!謝謝。

+0

爲什麼不寫出你正在遇到的確切錯誤?此外,這應該從拼寫錯誤和遺漏'@結束'的工作。發佈一個可以重現問題的最小完整示例。 – 2011-05-12 11:39:15

+0

發佈任何有意義的東西很難,因爲有很多代碼,如果我註釋掉變量(除了變量對其他東西的影響......),程序運行良好。我想這可能是代碼中更深層次的東西,但是有很多這樣的東西,我覺得不好意思發佈!我要重建整個實現,看看我是否能得到同樣的結果。正如我所說,其他子類以相同的方式工作正常,我努力不要把它放到一個XCode 4 bug ... – SomaMan 2011-05-12 13:03:13

+0

嗯,也許你結束了一個奇怪的包含沒有實例var界面中的'myVar'?您可以嘗試查看出現錯誤的預處理源文件,看看「mySuperClass」的接口定義是如何顯示的? – 2011-05-12 13:26:08

回答

2

我看不出你粘貼的代碼有什麼問題。我的第一個猜測是你沒有正確導入mySuperClass .h文件。即你錯過

#import "mySuperClass.h" //or #include 

在mySubClass.h,或mySubClass.m

4

我剛剛得到了一個非常類似的奇怪的錯誤,我可以在我的xcode超不再訪問屬性,並givine我編譯錯誤說「(*)未聲明(首次在此函數中使用)」。不過,我過去沒有任何問題...

問題是我在我的.m文件的頂部引入了拼寫錯誤,並且xcode編譯器輸出誤導了我。具體而言,我在@synthesize語句中出現拼寫錯誤的語句,無論是在合成語句中還是在頭文件中的相應變量中。

如果您有@synthesize語句或其他聲明,請使用精細齒梳(即您最近介紹的哪些行?)來檢查它們,或者甚至將其中的一部分註釋掉,以查看是否可以重新編譯並縮小擊倒罪魁禍首。

再一次,編譯器錯誤是非常誤導,所以它真的很難調試。雖然99.9%的錯誤是我自己的錯誤。 :)

+0

+1我應該先讀,而不是寫;-)最初沒有意識到點是什麼 – Kay 2011-06-21 15:32:41

+0

我的確有同樣的問題,而且問題的確是因爲在我的@synthesize方法之一中輸入錯字。 – 2011-10-07 11:58:05

1

我遇到了同樣的問題,浪費時間,我終於解決了它在我的項目後:

我重構我的源和刪除成員,但忘了刪除在.h文件中的@屬性定義。當我使用超級會員時,這會導致每個地方出現錯誤。順便說一句:超級方法很好。

所以檢查你的財產defs。感謝在他的解決方案post 8 Screwtape :-)

編輯:哎呀,克里斯的答案是非常相似,除了從錯別字與刪除。

1

我有好幾個星期

"Variable Undeclared" error when compiling to iOS Device, but not for Simulator

一個解決方案,我發現了同樣的問題是簡單地將編譯器從默認LLVM GCC 4.2更改爲LLVM Compiler 2.0(或`蘋果LLVM編譯器2.1)。這似乎是編譯器中的一個錯誤,但這只是一個猜測。

如果您完全不需要使用GCC編譯器,那麼更改它可以快速解決您的問題。