이 오류는 다음과 같은 의미입니다.“Error : 'type_name'이전에 예상되는 Specifier-Qualifier-List”?
문제
나는 셀 프로세서에서 작업하고 있으며 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;
iPhone Cocoa-Touch 프로젝트의 경우 :
나는이 문제가 있었고 Eric Farraro의 의견 덕분에 그것을 해결할 수있었습니다. 나는 다른 많은 수업에서 클래스 wshelper.h를 가져오고있었습니다. 그러나 나는 또한 내 whelper.h에서 같은 클래스 중 일부를 가져 왔습니다 (Eric이 말한 원형). 따라서이 문제를 해결하기 위해 wshelper.h 파일에서 가져 오기 파일이 실제로 .h 파일에 필요하지 않으므로 wshelper.m 파일로 가져 왔습니다.
가져 오기 루프로 가져 왔습니다.
---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
위의 코드는 내가 정리하는 데 도움이되었습니다. 누군가 여기서 무슨 일이 일어나고 있는지 설명 할 수 있습니까?
이 오류는 기본적으로 객체를 사용하기 전에 객체를 사용할 때 발생합니다.