Frage

Ich weiß, wie eine globale Variable zu tun, aber wenn ich versuche, eine globale Variable mit einer Zufallszahl-Funktion zu definieren, Xcode sagt „initializer Element nicht konstant ist.“ Der Compiler will nicht eine Variable aus einer Zufallszahl machen, da die Zufallszahlenfunktion nicht konstant ist.

Wie erstelle ich eine Zufallszahl und verwenden Sie dann, dass gleichen Wert für mehr als eine Aktion? (Zum Beispiel, um eine Farbe zu definieren und dann schreiben Sie diesen Wert auf ein Label?)

Code:

#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];
}

---- ------ bearbeiten

Danke für die Vorschläge. Es ist noch nicht für mich arbeiten, obwohl, was mache ich falsch?

Neuer Code:

#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];
}
War es hilfreich?

Lösung

Machen Sie es nicht konstanten und initialisieren es in applicationDidBecomeActive. Gibt es einen Grund, es muss konstant sein?

Andere Tipps

  

Ich weiß, wie eine globale Variable zu tun, aber wenn ich versuche, eine globale Variable mit einer Zufallszahl-Funktion zu definieren, Xcode sagt: „inkompatible Typen in der Initialisierung.“

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

Das ist keine Funktion; es ist ein Ausdruck. Ich wäre überrascht, wenn Sie nicht auch einen Fehler hier bekommen, weil Sie nicht eine globale Variable mit einem Ausdruck initialisiert werden können, die nicht konstant ist. Wie alltom.com sagt, müssen Sie es von applicationDidBecomeActive: zuzuweisen.

Die Warnung ist, weil Sie die Variable ein Zeigertyp (float *) gegeben haben, aber du bist nicht einen Zeiger auf zuweisen. Schneiden Sie das Sternchen aus, weil Sie nicht einen Zeiger in diesen Variablen gehen zu setzen.

  

Xcode will nicht eine Variable aus einer Zufallszahl machen, da die Zufallszahlenfunktion nicht konstant ist.

Xcode schert sich nicht die eine oder andere. Es wird berichtet nur die Ergebnisse des Compilers. Standardmäßig ist der Compiler für Objective-C GCC, aber Xcode unterstützt andere Compiler (und Xcode kommt mit einem anderen C / Objective-C-Compiler: LLVM-GCC).

  

... Ich kann nicht den gleichen Wert für das Label nennen.

Sie zeigen kein Etikett hier, und Sie können einen Wert nicht nennen. Sie können nur eine Funktion aufrufen, und Sie haben nicht ein im Code gezeigt.

  

Es gab mir die Fehlermeldung „Funktion undefined: erster Einsatz diese Funktion.“ In doButton obwohl es in applicationDidBecomeActive definiert wurde

Nein, war es nicht. Zuweisen einer Variablen erstellen keine Funktion.

Falls sich jemand fragt, fand ich endlich einen Weg, um dies effektiv zu tun. (Ich bin sicher, das ist, was alltom sagt, ich war einfach zu dumm zu verstehen.)

Ich erklärte ein Schwimmer und ein Samen in meinem .h-Datei:

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

Und in der Implementierungsdatei, definierte ich den Schwimmer als Zufallszahl, und ich srandom () als Zufallskeim-Generator.

- (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));
}

Dann überall Ich wollte eine Zufallszahl halten, habe ich

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

die Nummer initiieren, und von dort konnte ich verwenden generated1, generated2, Farbton, usw. als Variablen in einem beliebigen Funktion wollte ich (und mir sicher, dass diese Variablen als Schwimmer am Anfang der Datei zu erklären).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top