Что означает эта ошибка:“ошибка:ожидаемый спецификатор-уточняющий список перед 'имя_типа'”?

StackOverflow https://stackoverflow.com/questions/608175

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Решение

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

Другие советы

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

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

Убедитесь, что структура определена, ПРЕЖДЕ чем использовать ее в другом:

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

typedef struct
{
    int weight;
} wheel_t;

Проекты cocoa-touch для iPhone:

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

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

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

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

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

typedef struct car_t {

   char

   wheel_t

} car_t;

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

@simpleBob

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

---FILE A.h

@class B;

@interface A{      
}
@end

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top