# Problème avec l'utilisation des constantes



## Djobird (11 Décembre 2009)

Bonjour à vous ! 
Voila je débute sous l'Objectiv C et j'ai quelques soucis concernant les constantes. 

J'ai une série de constante pour une classe, je les définis donc dans mon entête de la facon suivante  : 

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


@interface CatalogueExplorerViewController : UITableViewController {
    IBOutlet UITableView *tableView;
    (...)
 
    
}
    (...)
    const NSString *elementDirectory = @"dir";
    const NSString *attributId = @"id";

- (void)parseXMLFile;

@end
```


Seulement, en en effécuant ceci j'ai une erreur de compilation du au linkage  : 
ld: duplicate symbol _elementDirectory in path/build/CarreRouge.build/Debug-iphonesimulator/CarreRouge.build/Objects-normal/i386/CatalogueExplorerViewController.o and path/build/CarreRouge.build/Debug-iphonesimulator/CarreRouge.build/Objects-normal/i386/CarreRougeAppDelegate.o

"Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1"

Alors j'ai essayé de le mettre dans mon .m, ce qui permet d'éviter cette erreur. Le problème est que j'ai ensuite d'autres classes qui héritent de mon CatalogueExplorerViewController et qui ont besoin de ces constantes. Or si elles sont def dans le .m, l'héritage n'a pas lieu :/

Est ce que vous seriez me dire comment je dois faire ?


----------



## ntx (11 Décembre 2009)

Un petit tour sur Google, et hop :
http://www.totodotnet.net/2009/05/29/the-best-way-to-declare-a-constant-in-objective-c/


----------



## Céroce (11 Décembre 2009)

Les constantes de classe n'existent pas en ObjC.


----------



## Djobird (11 Décembre 2009)

J'avais essayé ce conseil mais sans succès. Il est vrai que j'aurais peut etre pu le reprendre dans le sujet. 
 Le compilo ne reconnait pas le mot clé extern :/
Si je fais : 


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


@interface Constants : NSObject {
    
    extern NSString * const elementDirectory;
    (...)
}

@end
```


J'ai alors l'erreur : 
 error: expected specifier-qualifier-list before 'extern'


----------



## ntx (12 Décembre 2009)

Il ne faut pas mettre ta constante dans la déclaration de l'interface de la classe.


----------

