我知道该怎么做一个全局变量,但每当我试图定义一个随机数函数的全局变量,Xcode中说:“初始元素不是常量”。编译器不希望从一个随机数进行变量,因为随机数函数不是恒定的。

如何生成一个随机数,然后使用相同的值超过一个动作? (例如,为了定义一个颜色,然后该值写入到一个标签?)

代码:

#import "Slider_with_IBAppDelegate.h"

float * const hue = ((arc4random() % ((unsigned)100 + 1))/100.0);

//^this is where I get the error: "initializer element is not constant"

@synthesize label

//write value to label
- (IBAction) doButton {
label.text = [NSString stringWithFormat:@"%f", hue];
}

//set background color
- (void)applicationDidBecomeActive:(UIApplication*)application
{
self.label5.backgroundColor = [UIColor colorWithHue:hue                        
                                             saturation:1.0                                      
                                             brightness:1.0                                       
                                                  alpha:1.0];
}

----编辑------

感谢您的建议。它仍然没有工作对我来说,虽然,我究竟做错了什么?

新的代码:

#import "Slider_with_IBAppDelegate.h"

float const hue = ((arc4random() % ((unsigned)100 + 1))/100.0);

//^I still get the error: "initializer element is not constant."

@synthesize label

//write value to label
- (IBAction) doButton {
label.text = [NSString stringWithFormat:@"%f", hue];
}  
//^this is where I get the error "'hue' undeclared (first use of this function)"

//set background color
- (void)applicationDidBecomeActive:(UIApplication*)application
{

hue = ((arc4random() % ((unsigned)1000 + 1))/1000.0);
/*here I get the error "assignment of read-only variable 'hue.'"  
If I insert "float" just before hue, I do not get this error, 
but it still won't compile because of the error above.*/

self.label5.backgroundColor = [UIColor colorWithHue:hue                        
                                         saturation:1.0                                         
                                         brightness:1.0                                          
                                              alpha:1.0];
}
有帮助吗?

解决方案

请它非const和在applicationDidBecomeActive初始化它。有它必须是恒定的理由吗?

其他提示

  

我知道该怎么做一个全局变量,但每当我试图定义一个随机数函数的全局变量,Xcode中说:“不兼容类型的初始化。”

float * const hue = ((arc4random() % ((unsigned)100 + 1))/100.0);

这不是一个功能;它是一个表达式。我会感到惊讶,如果你不也在这里得到一个错误,因为你不能与不恒定的表达式初始化的全局变量。作为alltom.com说,你需要从applicationDidBecomeActive:分配给它。

该警告是因为你已经给该变量的指针类型(float *),但你不给它分配一个指针。切出星号,因为你不会把指针在这个变量。

  

Xcode的不希望从一个随机数进行的变量,因为随机数函数是不恒定的。

的Xcode不关心的一种方式或其它。这只是报告的编译器发现。默认情况下,编译器为目标C是GCC,但Xcode的支持其他的编译器(和Xcode中也确实会带来一个其他C / Objective-C的编译器:LLVM-GCC)。

  

...我不能呼吁标签相同的值。

你不表示标签在这里,你可以不叫价值。您只能调用一个函数,而你没有一个中所示的代码。

  

它给我的错误“功能未定义:第一次使用这个功能。”在doButton即使在applicationDidBecomeActive定义

没有,事实并非如此。分配给一个变量不创建一个函数。

在的情况下你想知道,终于找到了一种方法有效地做到这一点。 (我相信这是alltom在说什么,我只是太愚蠢理解。)

我声明的浮子,在我的h文件种子:

- (float)generate:(id)sender;
- (void)seed;

和在实现文件中定义了一个浮子作为随机数,并且我用srandom()作为一个随机种子产生器。

- (float)generate:(id)sender
{

//Generate a number between 1 and 100 inclusive
int generated;
generated = (random() % 100) + 1;

return(generated);
} 

- (void)seed {
srandom(time(NULL));
}

然后在任何地方我希望保留的随机数,我用

srandom(time(NULL));
generated1 = ((random() % 100) + 1)/100.0;

要发起的数量,并从那里我能够在我想任何函数的使用generated1,generated2,色调等作为变量(和我确信在该文件的顶部,以声明这些变量如浮标)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top