2011-06-22 3 views
2

J'ai le code suivant ci-dessous, où une classe de base a un membre qui est (devrait être) accessible par une classe dérivée.Variable non déclarée de la classe de base lorsque la classe dérivée a la propriété

Le code ci-dessous donne cependant une erreur de compilation
...abcAppDelegate.m:30: error: 'baseVal_' undeclared (first use in this function)

Si j'appelle la variable à l'aide self->baseVal_ ou si je supprimer la propriété définie dans la classe dérivée alors tout est ok.

De plus, si je définis une catégorie de la classe dérivée, alors je peux accéder à baseVal_ sans erreur.

//--------------------------------------------------------------- 
// 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

On dirait que vous obtenez l'erreur dans votre délégué d'application, pas la DerivedClass. Pouvez-vous publier le code AppDelegate dans lequel vous accédez à cette variable? – hundreth

+0

juste pour l'exemple ici J'ai coincé les classes (le code exact ci-dessus) dans le fichier appDelegate.m - mais l'exemple est tiré d'une base de code plus grande –

+0

BTW: Objective-C n'a pas de variables membres, mais des variables d'instance . – bbum

Répondre

0

Regardez ici: Click. Semble être un bug avec GCC, mais il est facilement réparable en ajoutant val en tant que variable d'instance au lieu d'utiliser la propriété sans.

+0

Peut être résolu en ajoutant le membre à la propriété ou en y accédant en utilisant self-> val –

+0

Une meilleure solution consiste à passer à LLVM. – bbum

Questions connexes