Problème avec la déclaration implicite de la fonction objective c
Que j'essaie d'en apprendre un peu plus sur Objective-c, et pour le moment je suis coincé. J'ai 4 erreurs, tout de même. "Déclaration implicite de la fonction", je l'ai googlé mais je n'ai pas trouver une solution.
Radio .h
#import <Cocoa/Cocoa.h>
@interface RadioStation : NSObject {
NSString* name;
double frequency;
char band;
}
+(double)minAMFrequency;
+(double)maxAMFrequency;
+(double)minFMFrequency;
+(double)maxFMFrequency;
-(id)initWithName:(NSString*)newName atFrequency:(double)newFrequency withBand:(char)newBand;
-(NSString*)name;
-(double)frequency;
-(char)band;
-(void)setName:(NSString*)newName;
-(void)setFrequency:(double)newFrequency;
-(void)setBand:(char)newBand;
@end
Radio .m
#import "RadioStation.h"
@implementation RadioStation
+(double)minAMFrequency{
return 520.0;
};
+(double)maxAMFrequency{
return 1610.0;
};
+(double)minFMFrequency{
return 88.3;
};
+(double)maxFMFrequency{
return 107.9;
};
-(id)initWithName:(NSString*)newName atFrequency:(double)newFrequency withBand:(char)newBand{
self = [super init];
if(self != nil){
name = [newName retain];
band = newBand;
if (band == 'F') {
if (newFrequency > maxFMFrequency()) {
frequency = maxFMFrequency();
}else if (newFrequency < minFMFrequency()) {
frequency = minFMFrequency();
}else {
frequency = newFrequency;
}
}else if (band == 'A') {
if (newFrequency > maxAMFrequency()) {
frequency = maxAMFrequency();
}else if (newFrequency < minAMFrequency()) {
frequency = minAMFrequency();
}else {
frequency = newFrequency;
}
}
}
return self;
}
@end
Les lignes
if (newFrequency > maxFMFrequency()) {
if (newFrequency < minFMFrequency()) {
if (newFrequency > maxAMFrequency()) {
if (newFrequency < minAMFrequency()) {
disent tous "déclaration Implicite de la fonction"
Merci à l'avance,
Dietger
OriginalL'auteur Marechal Dietger | 2011-01-25
Vous devez vous connecter pour publier un commentaire.
Je pense qu'il pourrait être parce que vous êtes mélange de C et Objective-C syntaxe.
Essayer:
Hmm... peut-être la Marque ou theChris pourrait nous éclairer sur le pourquoi. Ça va être la peine de voter de moi!
le problème est que lorsque vous accédez à la méthode, comme si c'était une méthode d'instance comme vous le faites ci-dessus, il retourne un pointeur et le compilateur suppose que vous voulez faire une opération binaire sur elle. > n'est pas un opérateur binaire de sorte qu'il jette l'erreur. J'apprécie votre effort, mais cette réponse n'est PAS correcte, comme indiqué par les OP dans le commentaire ci-dessus, donc je ne sais pas pourquoi il a été choisi. Doit être votre jour de chance! 🙂
Merci pour l'info, theChris. Ont 10 points de plus!
OriginalL'auteur Dave
Ce sont des méthodes de la classe de sorte que vous aurez besoin de changer de chacun d'entre eux comme suit:
Si donc la marque ce que l'on a accepté la réponse n'est pas celle qui ne fonctionne pas
Serait la bonne formulation suivante: "les méthodes de la classe" plutôt que "les méthodes d'instance"?
yip! J'ai vu que j'ai écrit statique et "corrigé" sans le penser, oups. Bonne prise, merci.
probablement préférable d'utiliser
[[self class] maxFMFrequency]
etc. dans le cas d'une sous-classe serait de remplacer les méthodes de la classe pour retourner constantes différentes.OriginalL'auteur theChrisKent
Vous mélangez les méthodes et les fonctions.
le code que vous appelez la chose avec
s'attend à voir une déclaration d'une fonction comme
mis en œuvre comme une fonction C - ce ne sera pas en mesure d'obtenir des données à partir de l'objet de sorte que vous devez utiliser une methof
l'en-tête n'déclarer une méthode comme
mais doit être appelé comme
OriginalL'auteur Mark
J'ai fait face à un même problème. triés par modification de l'appel de fonction comme indiqué ci-dessous
OriginalL'auteur paulb