IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Objective-C Discussion :

Programmer avec Grand Central Dispatch


Sujet :

Objective-C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 2
    Par défaut Programmer avec Grand Central Dispatch
    Bonjour,

    Je suis en train de développer une application sous grand central dispatch et j'ai un soucis dans la gestion des variables locales de blocks:

    Je cherche à créer des variables locales dans un block. Les variables locales sont de type int ou object (c++), types déclarés avant le bloc.
    Lorsque les variables sont déclarées dans le bloc, le compilateur retourne l'erreur suivante:
    "error: 'int genome_population::month' is not a static member of 'class genome_population'"

    Pourquoi xcode n'accepte pas la création de variable dans le block ?

    Si l'un d'entre vous sait comment regler le soucis, merci pour votre aide !

    Voici pour info un bout du code:
    La fonction dans laquelle le parallelisme est utilisé est membre de la classe "Genome Population", classe définie avant dans le programme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    int genome_population::compute_all_fitnesses (security_universe *market, int month_1, int month_2)
    {
       int
          month,
          n;
     
       dispatch_queue_t
          queue;
     
       if ((month_1 <0)||(month_2 > experiment_configuration->number_months_history)||(month_2 < month_1))
       {
          printf("genome_population::compute_all_fitnesses error: month_1 %i or month_2 %i out of range\n", month_1, month_2);
          return (-1);
       }
     
       maximum_fitness = -1/ALMOST_ZERO;
     
       queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
     
       dispatch_apply(size_of_population, queue, ^(size_t n)
       {
          int month;
    etc...

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par manu92370 Voir le message
    Bonjour,

    Je suis en train de développer une application sous grand central dispatch et j'ai un soucis dans la gestion des variables locales de blocks:

    Je cherche à créer des variables locales dans un block. Les variables locales sont de type int ou object (c++), types déclarés avant le bloc.
    Lorsque les variables sont déclarées dans le bloc, le compilateur retourne l'erreur suivante:
    "error: 'int genome_population::month' is not a static member of 'class genome_population'"

    Pourquoi xcode n'accepte pas la création de variable dans le block ?

    Si l'un d'entre vous sait comment regler le soucis, merci pour votre aide !

    Voici pour info un bout du code:
    La fonction dans laquelle le parallelisme est utilisé est membre de la classe "Genome Population", classe définie avant dans le programme.

    int genome_population::compute_all_fitnesses (security_universe *market, int month_1, int month_2)
    {
    int
    month,
    n;

    dispatch_queue_t
    queue;

    if ((month_1 <0)||(month_2 > experiment_configuration->number_months_history)||(month_2 < month_1))
    {
    printf("genome_population::compute_all_fitnesses error: month_1 %i or month_2 %i out of range\n", month_1, month_2);
    return (-1);
    }

    maximum_fitness = -1/ALMOST_ZERO;

    queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_apply(size_of_population, queue, ^(size_t n)
    {
    int month;

    etc...
    vous avez un month comme variable locale de la méthode compute_all_fitnesses, un month comme variable locale du bloc passé à dispatch_queue et le message d'erreur sous-entend que vous avez aussi une variable month comme variable d'instance de la classe genome_population…

    vous espérez vraiment arriver à un code lisible et sans erreur de compilation alors que les blocs imposent des règles très strictes quant à l'utilisation des variables et que l'attribut __block sert à aider le compilateur à savoir exactement quoi faire avec les variables extérieures utilisée par le bloc et que vous ne l'utilisez nulle part ?

    si la variable month déclarée à l'entrée de la méthode doit être utilisée dans le bloc, il faut la précéder de __block et il ne faut évidemment pas la "cacher" en redéclarant une variable du même nom dans le bloc lui-même…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int genome_population::compute_all_fitnesses (security_universe *market, int month_1, int month_2)
    {
       __block int month ;
       int   n;
     
    …
       dispatch_apply(size_of_population, queue, ^(size_t n)
       {
    // pas de int month ici : cela cacherait le month déclaré ci-avant… et génère le message d'erreur…
    et il faudrait sans doute mieux aussi que "month" soit initialisé avant l'entrée dans le bloc…

    Donner ici la déclaration de la classe compute_all_fitnesses (le .h …) permettrait aussi d'y voir plus clair…

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/07/2010, 16h18
  2. Liens : Aide à la programmation avec DirectX
    Par djbed dans le forum DirectX
    Réponses: 11
    Dernier message: 22/03/2007, 23h30
  3. [Classpath][execution] executer un programme avec des jar.
    Par LoLoSS dans le forum Général Java
    Réponses: 11
    Dernier message: 26/08/2004, 11h45
  4. Commencer la programmation avec le langage Java ?
    Par von_magnus dans le forum Débuter
    Réponses: 14
    Dernier message: 09/03/2004, 22h19
  5. Réponses: 3
    Dernier message: 27/08/2003, 21h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo