Что означает эта ошибка: «ошибка: ожидаемый список спецификаторов-спецификаторов перед именем типа»? - PullRequest
50 голосов
/ 04 марта 2009

Я работал над процессором Cell и пытаюсь создать структуру, которая будет содержать spe_context_ptr_t, которая будет использоваться в потоке для запуска контекста spe, а также будет содержать указатель на что-то еще это будет передано в контекст spu из потока (в настоящее время я пытаюсь сделать его общим указателем, но на самом деле это будет указатель на другую структуру, которую я определил). Когда я пытаюсь скомпилировать, я получаю следующую ошибку:

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;

Ответы [ 8 ]

61 голосов
/ 04 марта 2009

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

4 голосов
/ 16 декабря 2009

У меня было то же сообщение об ошибке, но решение другое.

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

Убедитесь, что структура определена ДО того, как использовать ее в другой:

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

typedef struct
{
    int weight;
} wheel_t;
2 голосов
/ 17 июня 2010

Для проектов iPhone с касанием какао:

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

0 голосов
/ 14 сентября 2015

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

0 голосов
/ 30 марта 2012

@ simpleBob

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

---FILE A.h

@class B;

@interface A{      
}
@end

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

0 голосов
/ 28 августа 2011

Мне удалось разобраться с этим, используя исправление Горгандо, но вместо того, чтобы убрать импорт, я закомментировал каждый из них по отдельности, создал приложение, а затем отредактировал, пока не избавился от них.

0 голосов
/ 20 августа 2010

Я получил это с помощью цикла импорта:

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

---FILE A.h
#import "B.h"
@interface A{      
}
@end
0 голосов
/ 08 апреля 2010

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

typedef struct car_t {

   char

   wheel_t

} car_t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...