2015-05-12 8 views
7

mam:bezpośrednie inicjalizacji struct w C

struct date 
{ 
int day; 
int month; 
int year; 
}; 

struct person { 
char name[25]; 
struct date birthday; 
}; 


struct date d = { 1, 1, 1990 }; 

inicjalizacji z

struct person p1 = { "John Doe", { 1, 1, 1990 }}; 

prace.

Ale jeśli próbuję

struct person p2 = { "Jane Doe", d}; 

otrzymuję błąd jak:

"Data nie może być konwertowane do int".

Co jest nie tak? d jest datą struct, a drugim parametrem powinna być również data struct. Tak powinno działać. Dziękujemy i pozdrawiam

+1

możliwy duplikat [inicjalizacji struktury C ze zmienną] (http://stackoverflow.com/questions/7700878/c-structure-initialization- with-variable) – Kishore

Odpowiedz

6
struct person p2 = { "Jane Doe", d}; 

Można to zgłosić w ten sposób, tylko jeśli deklaracja ma zakres blokowy. W zakresie plików potrzebujesz stałych inicjalizatorów (d to obiekt, a wartość obiektu nie jest wyrażeniem stałym w C).

Powodem tego jest to, że obiekt zadeklarowana w pliku-Scope bez magazynowania klasy specyfikatorem ma czas przechowywania statyczne i C mówi:

(C11, 6.7.9p4) „Wszystkie wyrażenia do inicjowania dla obiektu, który ma czas statyczny lub czas przechowywania nici, powinny być wyrażenia stałe lub ciągi literowe. "

W przypadku zakresu blokowego bez specyfikatora klasy pamięci obiekt ma automatyczny czas przechowywania.