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

이정민님의 프로필 이미지

작성한 질문수

홍정모의 따라하며 배우는 C++

4.10 구조체 struct

구조체 안의 구조체

24.01.15 06:31 작성

·

181

1

#include <iostream>
#include <string>

using namespace std;

struct Person
{
    double height;
    float  weight;
    int    age;
    string name;

    void print()
    {
        cout << height << " " << weight << " " << age << " " << name;
        cout << endl;
    }
};

struct Family 
{
    Person me, mom, dad; 
};

int main()
{
    Family fm1;

    Person fm1.me = { 2.0,100.0,20,"Jack Jack" };

    fm1.me.age = 4.0;

    fm1.me.print();

    return 0;
}

여기에서

Person fm1.me = { 2.0,100.0,20,"Jack Jack" };

Error expected a ';' E0065

가 뜹니다. fm1 안에 정의된 me를 초기화하고 age만을 바꾸어서 출력하고 싶은데 어떻게 해야 되나요?

답변 1

1

Soobak님의 프로필 이미지

2024. 01. 15. 22:25

안녕하세요, 답변 도우미 Soobak 입니다.

 

Family 구조체의 경우, Person 타입의 me, mom, dad 를 포함하고 있으므로, Family 인스턴스를 생성할 때 각 Person 객체를 {height, weight, age, name} 형태로 초기화할 수 있습니다.

다만, 질문자님께서 첨부하신 코드 중 Person fm1.me = {2.0, 100.0, 20, "Jack Jack"} 에 문법 오류가 있습니다.
C++11 이후부터 도입된 {} 을 통한 유니폼 초기화 방법과 혼동하신 것 같습니다.

수정된 코드를 통한 예시를 첨부드립니다.

struct Person
{
  double height;
  float weight;
  int age;
  string name;
};

struct Family
{
  Person me, mom, dad;
};

int main()
{
  Family fm1 {  // Family 인스턴스를 초기화하면서 각 멤버들을 초기화합니다.
    {2.0, 100.0, 20, "Jack Jack"}, // me
    {2.5, 150.0, 25, "Mom"}, // mom
    {3.0, 200.0, 30, "Dad"} // dad
  };

  // 이 때, 질문자님의 의도처럼 me 의 age 값만 수정하려면 다음과 같이 작성하시면 됩니다.
  fm1.me.age = 4;

  return 0;
}

이해가 어려우신 부분이 있으시면 편하게 추가 댓글 남겨주세요.

이정민님의 프로필 이미지
이정민
질문자

2024. 01. 16. 05:01

이해가 되었습니다. 감사합니다!