2011-06-08 64 views
1

我从另一个类中得到的布尔值构造的“下标值既不是数组也不是指针”错误。在找出导致这个错误的很多原因之后,我不确定我如何将它与我的相关联。我正在使用Cocos2D库,但我不认为它与此有关。在子类中,BOOL中的“下标值既不是数组也不是指针”错误

在另一个类中,这是我与一个属性的接口。只是称这是ClassA的这个例子:

#import <Foundation/Foundation.h> 
@interface ClassA : NSObject { 
@public 

    @public 
     BOOL _deactivateLabelToggle; 

} 

@property(nonatomic, assign) BOOL deactivateLabelToggle; 

.M

#import "ClassA.h" 

@implementation ClassA 
@synthesize deactivateLabelToggle = _deactivateLabelToggle; 

BOOL _deactivateLabelToggle[100]; 

-(id) init{ 
    self = [super init]; 
    if (!self) { 
     return nil; 
    } 

    return self; 
} 

- (void) dealloc{ 

    [super dealloc]; 

} 


@end 

我主要的类头

#import "ClassA.h" 
@class ClassA; 

@interface MainClass : CCLayer { 

    ClassA *classA; 
} 


@property(nonatomic, retain) ClassA *classA; 

@end 

MainClass.m

#import "MainClass.h" 

@implementation MainClass 

@synthesize classA; 

-(id) init { 

    if((self=[super init])) { 

      classA = [[ClassA alloc] init]; 

      classA.deactivateLabelToggle[i] = 0; // <---- Error here 

    } 
    return self; 
} 
+0

除了zneaks有用的解释之外,我只想补充一点,C数组不是属性支持的数据类型之一。这并不意味着你不能使用它们,但应该使用类似于NSArray或NSMutableArray的东西,以便更容易管理。看到这个堆栈溢出线程的更多细节:http://stackoverflow.com/questions/476843/create-an-array-of-integers-property-in-objective-c – VagueExplanation 2011-06-09 17:04:58

回答

3

deactivateLabelToggle财产这一声明在ClassA

@property(nonatomic, assign) BOOL deactivateLabelToggle; 

您在// <---- Error here行访问确实是既不阵列,也不指针。简单的BOOL变量不能被下标。

如果您打算引用文件,全球BOOL阵列在ClassA.m文件,你不能用合成的属性来完成它(和类型必须BOOL*而不是BOOL)。

+0

那么你是说它应该是BOOL * _deactivateLabelToggle;在界面中,然后一个属性@property BOOL * deactivateLabelToggle;?我仍然得到同样的错误。 – VagueExplanation 2011-06-08 21:49:19

+0

啊...好吧,我明白了。我的布尔不能在这堂课以外使用? – VagueExplanation 2011-06-08 22:32:30

+0

您的'BOOL' _instance变量_(@ interface'范围内的变量)可以从课程外部访问。但是,同名的文件全局'BOOL'数组不能(与实例变量一样容易)。从技术上讲,这个数组与你的类的唯一关系是它在同一个文件中定义。 – zneak 2011-06-08 23:43:22

0

你不需要(nonatomic,assign)在BOOL上。

+2

好吧,我会为你的工作,并摆脱它,谢谢。 – VagueExplanation 2011-06-08 21:49:54

+0

你也不需要[100] ...除非我在这里错过了什么? BOOL可以是YES或NO,或者无。 (如果这只是一个切换你现在正在使用,我想) – Luke 2011-06-08 21:52:07

+0

这是一百个布尔。它工作之前,我subclassed这个布尔到一个不同的文件,并得到这个错误。 – VagueExplanation 2011-06-08 21:53:55

1

你的问题是,你有一个名为“_deactivateLabelToggle”的实例变量是BOOL类型,与作为布尔值将数组同名的全局变量。您似乎认为在编写classA.deactivateLabelToggle时您将访问全局变量,但实际上您正在访问包装实例变量的属性。

+0

这是非常有见识的,但我仍然不知道如何解决这个问题。 – VagueExplanation 2011-06-08 21:51:05

+0

WhyTF这是downvoted?如果我错了,纠正错误信息会更有用。只是downvoting是没用的。它不会阻止人们多加注意这一点,否则我会进一步传播任何我可能有的错误观念。 – Chuck 2011-06-09 00:30:13

+0

我不知道,我甚至不认为我有能力downvote呢。但回到我的评论,我真的很喜欢你的信息,但是你还有什么可以补充我能做什么来访问全局变量吗?自从zneak的解释之后,我想我现在可能会做些什么,但是如果你想添加任何有用的东西,谢谢。 – VagueExplanation 2011-06-09 16:11:50

相关问题