2009-03-03 8 views
50

Ho lavorato al processore Cell e sto cercando di creare una struttura che contenga un spe_context_ptr_t, che verrà utilizzato all'interno del thread per avviare un contesto spe e conterrà anche un puntatore a qualcos'altro che sarà passato al contesto spu all'interno del thread (attualmente sto cercando di renderlo un puntatore generico, ma in realtà sarà un puntatore a un'altra struttura che ho definito). Quando provo e compilare, ottengo il seguente errore:Cosa significa questo errore: "errore: lista dei programmatori di specificazione prevista prima di 'type_name'"?

spu/../common.h:38: error: expected specifier-qualifier-list before 'spe_context_ptr_t' 

// here is the offending line(s) 

typedef struct _PTHREAD_BLOCK { 
    spe_context_ptr_t * context; // Error happens here 
    uintptr32_t args; 
} PTHREAD_BLOCK; 

risposta

61

Il compilatore non sa che spe_context_ptr_t è un tipo. Verificare che il typedef appropriato sia incluso nell'ambito della compilazione del codice. Potresti aver dimenticato di includere il file di intestazione appropriato.

+51

Nel mio caso (per un progetto iPhone), il problema era che includevo le intestazioni in modo tale che sospetto che causasse una dipendenza circolare. L'ho risolto dichiarando la classe prima del tempo nel mio file .h con il parametro @class. Una volta fatto questo, la dipendenza circolare è stata risolta e questo errore è andato via. Solo una nota se qualcuno lo sta vedendo in XCode/Obj-C. –

+0

grazie, visto dopo risposta. Ma puoi spiegare perché questo funziona e come? – ymutlu

4

Ho avuto lo stesso messaggio di errore ma la soluzione è diversa.

Il compilatore analizza il file dall'alto verso il basso.

assicurarsi che una struct è definito prima di utilizzarlo in un altro:

typedef struct 
{ 
    char name[50]; 
    wheel_t wheels[4]; //wrong, wheel_t is not defined yet 
} car_t; 

typedef struct 
{ 
    int weight; 
} wheel_t; 
+0

Utilizzare l'esempio per mostrare la soluzione (o anche) –

0

Devi dare un nome al struct così:

typedef struct car_t { 

    char 

    wheel_t 

} car_t; 
2

Per i progetti di cacao-touch di iPhone:

Ho avuto questo problema e grazie al commento di Eric Farraro, sono riuscito a risolverlo. Stavo importando una classe WSHelper.h in molte delle mie altre classi. Ma ho anche importato alcune di quelle stesse classi nel mio WSHelper.h (circolare come diceva Eric). Quindi, per risolvere questo problema ho spostato le importazioni dal mio file WSHelper.h al mio file WSHelper.m in quanto non erano realmente necessarie nel file .h comunque.

0

ho preso con un ciclo di importazione:

---FILE B.h 
#import "A.h" 
@interface B{ 
    A *a; 
} 
@end 

---FILE A.h 
#import "B.h" 
@interface A{  
} 
@end 
0

sono stato in grado di risolvere questo problema utilizzando correzione di Gorgando, ma invece di muoversi importazioni via, ho commentato ciascuna singolarmente, costruito l'applicazione, poi modificato di conseguenza fino a quando non mi sono sbarazzato di loro.

0

@simpleBob codice

---FILE B.h 
#import "A.h" 
@interface B{ 
    A *a; 
} 
@end 

---FILE A.h 

@class B; 

@interface A{  
} 
@end 

sopra mi ha aiutato a risolvere il problema. Qualcuno potrebbe spiegare cosa sta succedendo qui?

-1

questo errore si verifica fondamentalmente quando si utilizza l'oggetto prima di utilizzarlo.