Что означает эта ошибка: ошибка: ожидаемый список-спецификаторов-квалификаторов перед 'type_name'?

Я работал над процессором 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;

person Paul Wicks    schedule 03.03.2009    source источник


Ответы (7)


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

person Trent    schedule 03.03.2009
comment
В моем случае (для проекта iPhone) проблема заключалась в том, что я включал заголовки таким образом, что подозреваю, что это вызывает циклическую зависимость. Я решил это, заранее объявив класс в моем .h файле с параметром @class. Как только я это сделал, циклическая зависимость была устранена, и эта ошибка исчезла. Просто примечание, если кто-то видит это в XCode / Obj-C. - person Eric Farraro; 03.03.2010
comment
спасибо, видел это после ответа. Но можете ли вы объяснить, почему это работает и как? - person ymutlu; 30.03.2012

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

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

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

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

typedef struct
{
    int weight;
} wheel_t;
person Icegras    schedule 16.12.2009
comment
Используйте пример, чтобы показать решение вместо (или также) - person DrBeco; 23.06.2016

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

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

person Brad    schedule 17.06.2010

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

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

---FILE A.h
#import "B.h"
@interface A{      
}
@end
person Daniel    schedule 20.08.2010

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

typedef struct car_t {

   char

   wheel_t

} car_t;
person Typen    schedule 08.04.2010

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

person Ryan    schedule 28.08.2011

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

person newbie    schedule 14.09.2015