2011-06-22 56 views
2

我在下面有以下代碼,其中基類具有(應該可以)由派生類訪問的成員。當派生類具有屬性時,從基類中未聲明的變量

下面的代碼但是給人一種編譯錯誤
...abcAppDelegate.m:30: error: 'baseVal_' undeclared (first use in this function)

如果我打電話使用self->baseVal_的變量,如果我刪除在派生類中定義的屬性,則一切正常。

此外,如果我定義派生類的類別,那麼我可以訪問baseVal_而不會出錯。

//--------------------------------------------------------------- 
// BASE CLASS 
//--------------------------------------------------------------- 

@interface BaseClass : NSObject 
{ 
@protected  
    BOOL baseVal_; 
} 
@end 

@implementation BaseClass 
@end 

//--------------------------------------------------------------- 
// DERIVED CLASS 
//--------------------------------------------------------------- 

@interface DerivedClass : BaseClass { 
} 
@property (readwrite) BOOL val; 
@end 

@implementation DerivedClass 
@synthesize val; 
- (void) foo { 
    baseVal_ = YES; 
} 
@end 
+0

看起來你在應用程序委託中出錯,而不是DerivedClass。你可以在你訪問這個變量的地方發佈AppDelegate代碼嗎? – hundreth

+0

只是爲了這裏的例子,我將類(上面的確切代碼)插入到appDelegate.m文件中 - 但是該示例取自一個較大的代碼庫 –

+0

BTW:Objective-C沒有成員變量,但實例變量。 – bbum

回答

0

看看這裏:Click。似乎可能是GCC的一個錯誤,但是通過將val作爲實例變量而不是使用沒有的屬性,很容易解決。

+0

可以通過爲屬性添加成員或使用self> val –

+0

來解決問題更好的解決方案是切換到LLVM。 – bbum

相關問題