이 오류는 다음과 같은 의미입니다.“Error : 'type_name'이전에 예상되는 Specifier-Qualifier-List”?

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

  •  03-07-2019
  •  | 
  •  

문제

나는 셀 프로세서에서 작업하고 있으며 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

위의 코드는 내가 정리하는 데 도움이되었습니다. 누군가 여기서 무슨 일이 일어나고 있는지 설명 할 수 있습니까?

이 오류는 기본적으로 객체를 사용하기 전에 객체를 사용할 때 발생합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top