2014-04-14 9 views
0

내가 구조체를 initalize하려고하지만 C에서 다음과 같은 오류 MSG를 점점 오전 :초기화 구조체

오류 : 초기화 요소가 일정하지

오류 : ('resource01.resource.role'에 대한 초기화 근처)

URL의 경우 제대로 작동하지 않습니다. 먼저 역할에 대한 포인터가 있었고 변수의 주소가 할당되었습니다. 포인터가 필요 없기 때문에 포인터를 제거 했으므로 변수에 값만 할당 할 수 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

struct RestResourceNode_S 
{ 
    RestResource_T resource; 
    struct RestResourceNode_S const *next; 
} 

및 RestResource_t :

static char const resource01Url[] = "/dummy"; 
static int const resource01Role = 2; 
static struct RestResourceNode_S resource01 = 
{ 
    { 
     resource01Url, 
     resource01Role, 
     &DummyHandler_call 
    }, 
    NULL 
}; 

static struct RestResourcesManager_S resourcesManager = 
{ 
    &resource01, &resource01 
}; 

타입 RestResourceNode_S

가 정의됩니다 당신이 그것을 변경해야합니다

struct RestResource_S 
{ 
    char const *url; 

    int const role; 

    retcode_t (*handle)(Msg_T *); 
}; 

typedef struct RestResource_S RestResource_T; 
+0

'resource01Url' 배열의 위치는 링커에 의해 결정되는 상수 표현으로 간주 않습니다. –

답변

0

는 § 6.7.8 ¶ 4 표준 인, C99은

All the expressions in an initializer for an object that has static storage duration shall be constant expressions or string literals.

는 또한, const들이 일정 시간이 컴파일되지 않는다는 점에서 C의 진정한 상수가 아니다 말한다. 정적 저장소 할당 구조가있는 이니셜 라이저에는 상수 개체를 사용할 수 없습니다. 그러나 구조에 자동 스토리지 할당이 있으면 정상적으로 작동합니다.

은 당신이 할 수있는 것은 매크로로 const 객체를 정의이다 -

#define resource01Url "/dummy" 
#define resource01Role 2 
0

int const는 C에서 일정한 컴파일 시간으로 계산하지 않습니다 a #define 대신

+0

"#define으로 변경"이란 무엇을 의미합니까? – user3464679

+0

'#define resource01Role 2' –

+1

'int' 열거 형이 더 적절합니다 :'enum {resource01Role = 2,};' –