2009-03-03 2 views
50

Я работал над процессором Cell, и я пытаюсь создать структуру, которая будет содержать spe_context_ptr_t, которая будет использоваться в потоке для запуска контекста spe, а также будет содержать указатель на что-то еще, что будет передается в контекст spu из потока (в настоящее время я пытаюсь просто сделать его общим указателем, но на самом деле он будет указателем на другую структуру, которую я определил). Когда я пытаюсь скомпилировать, я получаю следующее сообщение об ошибке:Что означает эта ошибка: «error: expected specifier-qualifier-list before» 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; 

ответ

61

компилятор не знает, что spe_context_ptr_t типа. Убедитесь, что соответствующий тип typedef находится в области, когда этот код скомпилирован. Возможно, вы забыли включить соответствующий заголовочный файл.

+51

В моем случае (для проекта iPhone) проблема заключалась в том, что я включал заголовки таким образом, что я подозреваю, что это вызывает круговую зависимость. Я решил это, объявив класс раньше времени в моем .h файле с параметром @class. Как только я это сделал, круговая зависимость была решена, и эта ошибка исчезла. Просто обратите внимание, если кто-либо видит это в XCode/Obj-C. –

+0

спасибо, увидели это после ответа. Но можете ли вы объяснить, почему это работает и как? – ymutlu

4

У меня было то же сообщение об ошибке, но решение отличается.

Компилятор анализирует файл сверху вниз.

Убедитесь, что к структура определяется прежде чем использовать его в другой:

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

Используйте пример, чтобы показать решение вместо (или также) –

0

Вы должны назвать свою-структуру так:

typedef struct car_t { 

    char 

    wheel_t 

} car_t; 
2

Для iPhone какао-сенсорные проектов:

У меня была эта проблема, и благодаря комментарию Эрика Фарраро я смог решить эту проблему. Я импортировал класс WSHelper.h во многих других моих классах. Но я также импортировал некоторые из тех же классов в свой WSHelper.h (круговой, как сказал Эрик). Итак, чтобы исправить это, я переместил импорт из моего файла WSHelper.h в файл WSHelper.m, так как в любом случае они вообще не нуждались в файле .h.

0

Я получил его с петлей импорта:

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

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

Я был в состоянии разобраться в этом с помощью исправления Gorgando, но вместо того, чтобы двигаться импорт прочь, я заметил, каждый по отдельности, встроенные приложения, а затем отредактирован соответственно пока я не избавился от них.

0

@simpleBob

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

---FILE A.h 

@class B; 

@interface A{  
} 
@end 

код выше помог мне разобраться. Может ли кто-нибудь объяснить, что здесь происходит?

-1

Эта ошибка в основном возникает, когда вы используете объект перед его использованием.

Смежные вопросы