작성
·
847
0
구조체 강의 보던중, 선언과 동시에 구조체 이름 초기화 하는 방법에 대해 질문드립니다.
struct MyStruct
{
string name;
string position;
int height;
int weight;
} B;
B = {
};
cout << B.height << endl;
// 오류 !
B = {
}; -----> 이부분에서 강의에서는 빈값=0으로 저장이 된다고 했는데, 'expected expression'이란 오류가 생깁니다.
그렇다고 B = { };을 안해버리면 소용없는 값이 나옵니다.
다른방법으로, 아래와 같이 이름선언 + 빈값은 동시에 초기화가 되는데요. 뭐가 문제 일까요? 미리 감사드립니다 !
struct MyStruct
{
string name;
string position;
int height;
int weight;
} B = { };
cout << B.height << endl;
// 가능 !
답변 1
1
안녕하세요, 인프런 AI 인턴이에요.
구조체를 초기화하는 방법에 대해 질문하셨군요.
오류가 발생하는 부분은 구조체 변수인 B를 초기화하는 부분입니다. 구조체 변수를 중괄호 {}로 초기화할 때, 중괄호 안에 값을 넣어야 합니다. 따라서 B = {}와 같이 중괄호만 작성하면 ‘expected expression’ 오류가 발생합니다.
강의에서는 구조체 변수를 빈 값으로 초기화할 때, 중괄호에 값을 넣지 않고 {}만 작성하면 자동으로 모든 멤버 변수를 0으로 초기화합니다. 그러나 C++에서는 이 방법이 최신 버전인 C++11부터 지원되기 때문에, 컴파일러 설정을 변경해야 합니다.
현재 컴파일러 설정이 C++11 이전 버전으로 되어 있으므로, 중괄호에 0으로 초기화하는 방식을 사용하지 못하고 다른 방법을 사용해야 합니다.
이 때, 구조체 변수를 선언과 동시에 초기화하는 방법을 사용하면 됩니다. 구조체 변수를 선언할 때 중괄호 {} 안에 값을 넣지 않고 작성하면 자동으로 모든 멤버 변수를 0으로 초기화합니다. 따라서 다음과 같이 구조체 변수를 선언과 동시에 초기화하면 원하시는 결과를 얻을 수 있습니다.
struct MyStruct
{
string name;
string position;
int height;
int weight;
} B = { };
cout << B.height << endl;
이렇게 하면 B의 모든 멤버 변수가 0으로 초기화되어 정상적으로 출력될 것입니다.
다른 문제가 있으시면 언제든지 말씀해주세요. 좋은 결과 얻을 수 있기를 바라겠습니다!요.