구조체 내부의 변수를 직접 초기화하는 것은 불가능합니다.
구조체는 "이런이런 변수들을 하나로 묶을 것이다" 라는것만 지정해주는건데, 거기다가 "이녀석은 값이 0이다" 라고 때려박는건 별도의 영역에서 동작하는 친구입니다. 이름만 묶어둔거랑 그 값에다가 뭘 집어넣는 "삽입 연산"이랑은 서로 다른 영역이라는건 납득이 가시나요? 이름을 묶어주는건 컴파일러가 해주는거고, 값의 삽입은 명령어를 통해 CPU가 연산하는 작업이니까요...
자 그럼 이 코드를 봅시다.
struct W{
char word[10000];
int num=0;
};
물론 의도는 "W 구조체엔 word라는 녀석과 num이라는 녀석이 있는데, 그 중 num은 값을 0을 가지고 시작했으면 좋겠어" 겠네요. 하지만 컴파일러는 이 말을 이해하지 못할 수도 있습니다. "num 에 0을 넣어라" 라는 명령어를 추가로 생성해줘야하는데 이걸 못하는거죠.
struct W{
char word[10000];
int num;
W(){num = 0;}
};
이렇게 별도의 "생성자"라는 함수를 만들어서, 초기화할 때 어떤동작을 해달라고 CPU한테 알아들을 수 있는 명령어로 만들어줄 필요가 있습니다. 근데 저게 C에서 가능한지는 잘 모르겠네요...
제 컴퓨터에서 돌렸을 때의 에러메세지를 보면 이렇게 뜨네요
error C2864: 'W::num' : 정적 상수인 정수 계열 데이터 멤버만 클래스 내부에서 초기화될 수 있습니다.
대충 클래스 = 구조체 인데... 즉 초기화는 저 선언부에서 할 수 있는 영역이 아니라는거죠.
음...물론 어떤 컴파일러들은 저 숫자 0이 상수라는 정보를 알고있어서 초기화하는 함수를 컴파일러 스스로가 알아서 만들어주기도합니다. 그 예가 코드블럭이랑 ANSI C 컴파일러겠네요. 하지만 채점서버는 그러지 않습니다. 수정해주세요.