2010-06-22 7 views
3

S'il vous plaît voir le commentaire:Syntaxe correcte pour accéder à un tableau d'objets de style c via la messagerie objective-c?

static void drawAnObject() { 
    Form *form = [[Form alloc] init]; 
    int i; 

    [form randomizeCube]; 
    glColor3f(0.0, 0.0, 0.0); 

    for(i = 0; i < MAX_CUBE; i++) { 
     glutWireCube(form->cube[i]->size); 
      //compiler issues hard warning because form->cube is protected!! 
    } 
} 

Je préfère utiliser l'accesseur j'ai placé sur le « Formulaire » classe pour que je puisse plutôt écrire quelque chose comme:

glutWireCube([[form cube][i] size]); 

Mais j'obtenir un « ne peut convertir un type de pointeur "erreur lorsque je tente de compiler ceci.

Ceci est mon accesseur dans le "Form" classe: "cube"

@implementation Form 
- (Cube *) cube { 
    return *cube; 
} 

La variable est définie dans le fichier d'en-tête classe "Formulaire" comme suit:

@interface Form : NSObject <NSCopying> { 
    Cube *cube[MAX_CUBE]; 
} 

ci-dessous sont les variables de la classe "Cube" telles que définies dans son fichier d'en-tête:

@interface Cube : NSObject <NSCopying> { 
    double size; 
    double positionX; 
    double positionY; 
    double positionZ; 
} 

... et les accesseurs correspondants dans t il mise en œuvre fichier (.m):

- (double) size { 
    return size; 
} 

- (void) setSize: (double) newSize { 
    size = newSize; 
} 

- (double) positionX { 
    return positionX; 
} 

- (void) setPositionX: (double) newPositionX { 
    positionX = newPositionX; 
} 

- (double) positionY { 
    return positionY; 
} 

- (void) setPositionY: (double) newPositionY { 
    positionY = newPositionY; 
} 

- (double) positionZ { 
    return positionZ; 
} 

- (void) setPositionZ: (double) newPositionZ { 
    positionZ = newPositionZ; 
} 

Je voudrais éviter d'utiliser un NSMutableArray o NSArray comme je l'intention de porter cette partie du code de projet pour les plates-formes non-cacao plus tard.

J'ai passé les dernières heures à chercher la bonne façon de procéder. Y a-t-il une "bonne façon" de le faire en utilisant des tableaux C-Style et des accesseurs Objective-C?

Répondre

1

Il vous manque un astérisque dans votre méthode d'accès. C'est difficile parce que vous ne pouvez pas retourner les types de tableau à partir de méthodes en C ou Objective-C. Essayez ceci:

@implementation Form 
- (Cube **) cube { 
    return &cube[0]; // alternatively just "return cube;" will suffice 
} 
@end 

Ce renvoie un pointeur sur un pointeur, alors quand vous SUBSCRIPT avec [form cube][i] vous êtes toujours à gauche avec un type de pointeur, et dans les récepteurs Objective-C doivent être des types de pointeur. Cela devrait vous permettre de faire

glutWireCube([[form cube][i] size]); 
+0

Merci beaucoup pour votre réponse rapide. Je vais essayer cela et poster mes conclusions. – Rafael

+0

Résolu et compris. Merci. – Rafael