인프런 커뮤니티 질문&답변

Aniz님의 프로필 이미지
Aniz

작성한 질문수

[하루 10분|C++] 누구나 쉽게 배우는 C++ 프로그래밍 입문

구조체

구조체 이름 동시에 초기화하는 방법 오류

작성

·

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으로 초기화되어 정상적으로 출력될 것입니다.

다른 문제가 있으시면 언제든지 말씀해주세요. 좋은 결과 얻을 수 있기를 바라겠습니다!요.

Aniz님의 프로필 이미지
Aniz

작성한 질문수

질문하기