구조체 이름 동시에 초기화하는 방법 오류
1045
작성한 질문수 1
구조체 강의 보던중, 선언과 동시에 구조체 이름 초기화 하는 방법에 대해 질문드립니다.
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으로 초기화되어 정상적으로 출력될 것입니다.
다른 문제가 있으시면 언제든지 말씀해주세요. 좋은 결과 얻을 수 있기를 바라겠습니다!요.
switch 구문과 break continue 구문 강의 질문드립니다
0
60
1
opreator*
0
77
1
cin은 c언어에서의 scanf와 동일하다고 봐도 될까요?
0
140
0
질문이 있습니다.
0
109
1
temp1 선언
0
91
1
const MyStruct& 사용
0
114
0
인트형 포인터의 사이즈가 8이 나옵니다.
0
218
1
MyStruct* temp = new MyStruct; 에서 temp도 delete를 해야하나요?
0
128
1
#include <iostream> 중복
0
155
1
int sum=sumArr(arr. SIZE) 문의
0
137
1
4:04질문입니다.
0
111
1
4:39 질문입니다.
0
130
1
질문있습니다.
0
105
1
질문있습니다.
0
108
1
9:11 b에는 a이 주소값이 들어갔다고 하는데 *b의 값이 왜 a랑 같은 값이 나오나요?
0
163
1
빌드 실패 오류 질문 드립니다!
0
397
1
추상화와 클래스중 질문
0
176
1
질문사항 있습니다..동작을 안하고 있어요..
0
340
2
질문 드립니다
0
188
1
함수와 구조체 강의 음성이 이상합니다.
0
200
1
분할 컴파일 과정에서의 오류 발생
0
606
2
<<, >> 비트 연산자에 대한 설명이 맞나요?
0
451
2
포인터 연산
0
390
2
비주얼 스튜디오 코드를 사용해도 되나요?
0
805
1





