2010-10-22 17 views
0

J'ai un morceau de code similaire à ceci:Utilisation d'objets constants dans-c objectif

//Foo.h 
OBJC_EXPORT MyObject *const myObj; 

// Foo.m 
MyObject *const myObj; 

@implementation Foo 

+(void) initialize 
{ 
    if (self = [Graph class]) 
    { 
      myObj = [Config get:@"Foo"]; // <--- ERROR! assignment of read-only variable 'Foo' 

      // .... 
    } 
} 

// .... 

@end 

Cela doit être accompli comme celui-ci, comme doit être chargé de la variable constante exactement une fois à partir d'un fichier de configuration. Comment puis-je utiliser les constantes de cette façon (oui, il faut que ce soit des constantes, parce que si elles sont changées, cela présentera un tout autre groupe de problèmes ..)?

+0

Y a-t-il une erreur ici? 'Foo' est la variable de classe, alors la ligne de problème devrait-elle lire' myObj = 'au lieu de' Foo = '? – bosmacs

+0

Oh oui merci –

Répondre

1

Il y a probablement une meilleure façon, mais ma première pensée lui affecter par une indirection de pointeur supplémentaire, par exemple:

MyObject** nonConstObj = (MyObject**)&myObj; 
*nonConstObj = [Config get:@"Foo"]; 

Si elle était C++, const_cast<> serait approprié, mais je ne suis pas sûr de la C idiome le plus courant/équivalent.

+0

ah, cela a fonctionné, merci! –