[Objective-C] parse error before 'int'

kef_hin

Membre confirmé
27 Mars 2008
29
0
Bonjour, je viens vous demander votre avis sur un problème rencontré sur un programme extrêmement simple en Objective-C et qui me rend fou. Je suis désespéré...

J'ai un main et une classe... Quinze lignes de codes tout au plus, mais il n'y a pas moyen de compiler...

main.m
Bloc de code:
#import <Cocoa/Cocoa.h>
#import "SquareLab.h"

int main(int argc, char *argv[])
{
    return NSApplicationMain(argc,  (const char **) argv);
}

SquareLab.m
Bloc de code:
#import "SquareLab.h"

@implementation SquareLab

- (id) initWidth: int width Height: int height
{
	[super init];
	self.width = width;
	self.height = height;
}

@end

SquareLab.h
Bloc de code:
#import <Cocoa/Cocoa.h>


@interface SquareLab : NSObject
{
	
	int width;
	int height;

}

@end

Or quand j'essaye de compiler, je reçois cette erreur :

image3zr.png


Je ne comprends vraiment pas d'où ça vient. Merci d'avance à ceux qui pourront m'aider :zen:

Je précise aussi que je suis complètement débutant en Objective-C, donc je m'excuse d'avance si je vous ennuie pour quelque chose de vraiment stupide.
 

Nyx0uf

Zetsubou Sensei
Club MacG
1 Janvier 1970
805
55
The net is vast and infinite.
whine.fr

kef_hin

Membre confirmé
27 Mars 2008
29
0
Je sais bien que je n'y connais rien. J'ai commencé à apprendre aujourd'hui :D (Pas avec les mêmes livres, mais tout de même, je ne me suis pas lancé dans cette histoire sans aucune référence)

Le problème, c'est que je suis bloqué sur ce problème depuis des heures sans comprendre. Alors si tu pouvais pointer l'erreur, peut-être que cela m'aiderait à comprendre un peu mieux la syntaxe de l'Objective-C :)
 

Lio70

Fitzcarraldo de l'IT
Club MacG
16 Janvier 2004
2 394
1 222
51
Cracovie
Tu as mal renseigne les termes dans l'initialisation. Par exemple:
Bloc de code:
[[ChaiseElectrique alloc] initWithNioub:@"kef_hin" remarque:@"Il faut aussi lire la page 1"];
:D;)
 

CathyGYM

Membre actif
28 Novembre 2010
160
1
Tu as mal renseigne les termes dans l'initialisation. Par exemple:
Bloc de code:
[[ChaiseElectrique alloc] initWithNioub:@"kef_hin" remarque:@"Il faut aussi lire la page 1"];
:D;)
C'est un peu vache... :D

Si tu essaies de supprimer l'espace entre "width" et "Height", çà ne va pas un peu mieux ? parce que là le nom de variable en deux mots, çà ne le fait pas trop !!!
 

Lio70

Fitzcarraldo de l'IT
Club MacG
16 Janvier 2004
2 394
1 222
51
Cracovie
Mais non ce n'est pas vache. C'est de l'humour et ça montre un exemple de code.

Tu mérites aussi la chaise :love::p car tu n'as pas vu que son erreur consiste a écrire initWidth a la place de initWithWidth et qu'il n'a pas mis ses int entre parenthèses.

Sans doute un problème de soupe a cause de la non-connaissance de l'anglais.

Bloc de code:
-(id)initWithWidth:(int)width Height:(int)height
{
 
Dernière édition:

kef_hin

Membre confirmé
27 Mars 2008
29
0
Hep,

Alors, j'avais fini par trouver l'erreur des parenthèses (en fait, il y avait une erreur dans le cours : http://www.tutomobile.fr/les-bases-de-lobjective-c-tutoriel-iphone-n°2/29/07/2010/)

Par contre, il semble bien qu'il y ait une convention pour écrire "initWith...", mais ce n'est pas du tout obligatoire. Dans ce cas-ci, cela partait d'un choix personnel. Je trouvais que c'était bien plus équilibré, épuré et lisible de cette manière. J'en ai même vu qui écrivait des horreurs (en tout cas, pour moi) du type : initWithWidth: (int)width andHeight: (int)height

En revanche, toujours pas moyen d'utiliser @property et @synthesize :(
 

tatouille

Membre expert
1 Juin 2004
5 174
493
Stanford CA
id -> void *

ALLOCMEMADDR struct CONSTRUCTOR(arg)
{
//ALLOC CONTAINER

return ALLOCMEMADDR;
}

APPREND LE C avant de te lancer dans obj-c

Bloc de code:
enum {
	ARRAY_ERRNO,
	ARRAY_NEW,
	ARRAY_ONITEM
};

typedef struct {
	uint32_t index;
	uint32_t hash;
	const void * value;
	uint32_t type;
} array_item_t;

typedef struct {
	int32_t status;
	int32_t count;
	array_item_t * items;
} array_t;

array_t * array_new(void) 
{
	array_t * arr;
	if (NULL == (arr = (array_t *)malloc(sizeof(array_t) + 1))) {
		errno = ENOMEM;
		return NULL;
	}
	if (NULL == (arr->items = (array_item_t *)malloc(sizeof(array_item_t) + 1))) {
		errno = ENOMEM;
		return NULL;
	}
	arr->status = ARRAY_NEW;
	arr->count = 0;
	return arr;
}
 
Dernière édition: