# [Objective-C] parse error before 'int'



## kef_hin (5 Mars 2012)

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*

```
#import <Cocoa/Cocoa.h>
#import "SquareLab.h"

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

*SquareLab.m*

```
#import "SquareLab.h"

@implementation SquareLab

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

@end
```

*SquareLab.h*

```
#import <Cocoa/Cocoa.h>


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

}

@end
```

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







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

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 (5 Mars 2012)

Ca vient du fait de ne connaitre STRICTEMENT RIEN de la syntaxe de l'objective-c.

En fait, je pense même que pointer l'erreur ne t'avancera pas beaucoup plus, ce qu'il te faut c'est un bon bouquin.

http://www.amazon.fr/s/ref=nb_sb_no...lias%3Daps&field-keywords=objective+c&x=0&y=0

http://www.amazon.fr/s/ref=nb_sb_no...s&field-keywords=cocoa&rh=i%3Aaps%2Ck%3Acocoa


----------



## kef_hin (5 Mars 2012)

Je sais bien que je n'y connais rien. J'ai commencé à apprendre aujourd'hui  (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 (5 Mars 2012)

Tu as mal renseigne les termes dans l'initialisation. Par exemple:

```
[[ChaiseElectrique alloc] initWithNioub:@"kef_hin" remarque:@"Il faut aussi lire la page 1"];
```


----------



## CathyGYM (5 Mars 2012)

Lio70 a dit:


> Tu as mal renseigne les termes dans l'initialisation. Par exemple:
> 
> ```
> [[ChaiseElectrique alloc] initWithNioub:@"kef_hin" remarque:@"Il faut aussi lire la page 1"];
> ```


C'est un peu vache... 

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 (5 Mars 2012)

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: 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.


```
-(id)initWithWidth:(int)width Height:(int)height
{
```


----------



## kef_hin (6 Mars 2012)

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 (9 Mars 2012)

id -> void *

ALLOCMEMADDR struct CONSTRUCTOR(arg)
{
//ALLOC CONTAINER

return ALLOCMEMADDR;
}

APPREND LE C avant de te lancer dans obj-c


```
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;
}
```


----------

