Précédent   Forum du club des développeurs et IT Pro > Systèmes > Mac > Objective-C
Objective-C Forum d'entraide sur le langage de programmation Objective-C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 14/02/2013, 14h18   #1
ch0c4
Futur Membre du Club
 
Homme
Développeur Web
Inscription : février 2012
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : février 2012
Messages : 21
Points : 19
Points : 19
Par défaut Undefined symbols for architecture armv7

Bonjour, voila mon soucis

Je voudrais crée une variable globale à toutes les classes de mon applications, me documentant sur le sujet voila ce que je fait

VCHome.h
Code :
1
2
3
4
extern NSDictionary *chaton;

@interface .....
VHome.m
Code :
1
2
3
4
- (void) newMessageReceived: (NSDictionnary *)messageContent{
    chaton = messageContent;
}
VCDetailChatAvecMembre.m Quelque part dans le viewDidLoad()

Code :
1
2
NSLog(@"CHATON : %@", chaton);
Cette erreur me tombe dessus quand je compile
Code :
1
2
3
4
5
6
7
Undefined symbols for architecture armv7:
  "_chaton", referenced from:
      -[VCHome newMessageReceived:] in VCHome.o
      -[VCDetailChatAvecMembre viewDidLoad] in VCDetailChatAvecMembre.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Merci pour vos réponse.
ch0c4 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2013, 15h49   #2
JeitEmgie
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 375
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 375
Points : 2 891
Points : 2 891
Citation:
Envoyé par ch0c4 Voir le message
Code :
1
2
extern NSDictionary *chaton;
et le
Code :
1
2
NSDictionary *chaton;
il est dans quel fichier .m ?
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2013, 15h58   #3
ch0c4
Futur Membre du Club
 
Homme
Développeur Web
Inscription : février 2012
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : février 2012
Messages : 21
Points : 19
Points : 19
Nulle part car c'est une variable global et si je veux le mettre dans n'importe qu'elle endroit dans le code xcode m'affiche
Code :
1
2
Interface type cannot be statically allocated
ch0c4 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2013, 08h25   #4
JeitEmgie
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 375
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 375
Points : 2 891
Points : 2 891
Citation:
Envoyé par ch0c4 Voir le message
Nulle part car c'est une variable global et si je veux le mettre dans n'importe qu'elle endroit dans le code xcode m'affiche
Code :
1
2
Interface type cannot be statically allocated
çà n'a rien à voir :
en C et donc aussi en Objective-C et Objective-C++, vous déclarez dans le .h le nom et le type de la variable comme étant alloué ailleurs :
Code :
1
2
extern TYPE var_name ;
et dans le .c, le .m ou .mm
le message "Interface type cannot be statically allocated" apparaît dans les conditions suivantes : vous avez déclaré une classe ou une interface en Objective-C et vous déclarez ensuite une variable en oubliant le "*" pour indiquer "pointeur sur", par exemple :
au lieu de
Les classes, interfaces, protocoles en Objective-C sont toujours allouées dynamiquement contrairement au C++ qui admet les 2.
Et Objective-C çà reste du C : donc "*" pour les pointeurs... la syntaxe "à la Java" ne passe pas pour les déclarations, par contre à l'invocation : "myObject.itsProperty" fonctionnera aussi bien que "myObject->itsProperty", pour peu que vous utilisiez correctement les accessors (@synthetize, @property et C°).
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/02/2013, 09h44   #5
ch0c4
Futur Membre du Club
 
Homme
Développeur Web
Inscription : février 2012
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : février 2012
Messages : 21
Points : 19
Points : 19
Salut, merci pour la réponse,

Mon problème n'est pas réglé car je veux que ma variable "chaton" qui est dans VCHome est la même valeur dans VCDetailChatAvecMembre.

Avec ta solution sa me résous mon soucis de "linker" mais pas mon soucis de variable.

Si je re-déclare ma variable "chaton" dans VCDetailChatAvecMembre elle n'a plus la valeur qu'elle avait dans le VCHome (normal tu vas me dire).

Donc mon soucis c'est, comment je peux avoir cette variable (qui est dynamique) dans 2 classes différentes avec la même valeur ?
ch0c4 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2013, 09h59   #6
JeitEmgie
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 375
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 375
Points : 2 891
Points : 2 891
un seul NSDictionary *chaton; dans un seul .m évidemment

d'ailleurs s'il n'y a plus de problème de link c'est que c'est le cas sinon vous auriez soit un undefined variable soit un duplicate variable...
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/02/2013, 12h01   #7
ch0c4
Futur Membre du Club
 
Homme
Développeur Web
Inscription : février 2012
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : février 2012
Messages : 21
Points : 19
Points : 19
Désolé de te contredire, mais je n'ai plus d'erreur de "linker" quand je déclare ma variable dans les 2 .m sinon j'obtiens ceci quand je compile

Code :
1
2
3
4
5
6
Undefined symbols for architecture armv7:
  "_chaton", referenced from:
      -[VCDetailChatAvecMembre viewDidLoad] in VCDetailChatAvecMembre.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
On voit bien que par rapport au message #1 il n'y a plus d'erreur sur le VCHome là où j'ai déclaré ma variable (NSDictionary *chaton).
ch0c4 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2013, 13h23   #8
JeitEmgie
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 375
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 375
Points : 2 891
Points : 2 891
Vous êtes certain que tous les fichiers .m sont bien inclus dans toutes les cibles du projet ?
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/02/2013, 13h38   #9
ch0c4
Futur Membre du Club
 
Homme
Développeur Web
Inscription : février 2012
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : février 2012
Messages : 21
Points : 19
Points : 19
C'est le fait que dans le "file inspector" du fichier il y a bien le projet coché dans l'onglet "target Membership" alors oui
ch0c4 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2013, 20h50   #10
JeitEmgie
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 375
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 375
Points : 2 891
Points : 2 891
testé dans un projet vierge : 1 seule variable dans un .m et accessible depuis l'autre qui inclus le .h contenant le "extern" : pas de problème, cela compile et link correctement.

je ne sais pas ce que vous avez fait mais le .m qui contient la déclaration de la variable n'est pas compilé pour l'architecture armv7 : probablement un Build setting sur ce .m
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/02/2013, 11h10   #11
ch0c4
Futur Membre du Club
 
Homme
Développeur Web
Inscription : février 2012
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : février 2012
Messages : 21
Points : 19
Points : 19
Ok merci pour tes réponses, pour ma variable disponible à toutes les classes, j'utilise l'appDelegate, c'est plus propre et sa fait plus objet ^^.
Je met le post en résolu
ch0c4 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 16h40.


 
 
 
 
Partenaires

Hébergement Web