2011-06-29 4 views
4

Dans Objective-C J'ai le code valide:bloc Objective-C++ vs bloc Objective-C

TestTwo.h:

@interface TestTwo : NSObject 
-(void)test; 
@end 

TestTwo.m:

@implementation TestTwo 
-(void)test 
{ 
    void (^d_block)(void) = 
    ^{ 
     int n; 
    }; 
} 
@end 

Ce que je Nous voulons vraiment une classe Objective-C++ qui définit une méthode similaire à test. C'est une simplification, mais illustre l'intention. Ainsi, en Objective-C++ je:

Test.h:

class Test 
{ 
public: 
    void TestIt(); 
}; 

Test.mm:

#include "Test.h" 

void Test::TestIt() 
{ 
    void (^d_block)(void) = 
    ^{ 
     int n; 
    }; 
} 

Je reçois l'erreur suivante:

error: 'int Test::n' is not a static member of 'class Test'.

Si je supprimer int n; il n'y a pas d'erreur. Comment puis-je définir n dans le bloc dans ce contexte?

Répondre

6

C'est a GCC bug filed under radar #8953986. Vous pouvez utiliser Clang/LLVM 2.0+ pour compiler votre code tel quel ou placer vos variables de bloc dans l'espace de nom global (par exemple, int ::n) et utiliser GCC. Notez que l'utilisation de l'espace de nom global dans ce cas n'est pas valide C++ et Clang/LLVM 2.0+ ne le compilera pas.

+0

Passer au compilateur LLVM semble faire l'affaire. À votre santé! – ptoinson

0

Dans la définition de classe, vous pouvez ajouter:

 
private: 
static int n; 
+0

Hmmm. Je suppose que si je dois le faire je peux le faire. Mais, je cherche un moyen de définir une variable portée au bloc. Est-ce que ce n'est pas possible? – ptoinson

Questions connexes