강의

멘토링

커뮤니티

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

호두님의 프로필 이미지
호두

작성한 질문수

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

10.4 제휴 관계

[10:22] Doctor.h와 Patient.h가 분리되어 있을 때는 meetDoctors함수를

해결된 질문

작성

·

391

3

안녕하세요?

Doctor.h와 Patient.h가 분리되어 있을 때는 meetDoctors함수는 Patient.h에 있기 때문에 Doctor.h로 옮길 수가 없는데 

이럴땐 어떻게 해야하나요?

감사합니다.

<코드>

#pragma once

#include <iostream>
#include <string>
#include <vector>
#include "Doctor.h"

//class Doctor;

class Patient
{
private:
    std::string m_name;
    std::vector<Doctor*> m_doctors;

public:
    Patient(const std::string& name_in)
        : m_name(name_in)
    {}

    void addDoctor(Doctor* new_doctor)
    {
        m_doctors.push_back(new_doctor);
    }

    void meetDoctors()
    {
        for (auto& elem : m_doctors)
            std::cout << "meet doctor : " << elem->m_name << std::endl;
    }

    void setName(const std::string& name_in)
    {
        m_name = name_in;
    }

    friend std::ostream& operator<<(std::ostream& outconst Patient& patient)
    {
        out << patient.m_name;

        /*for (auto& elem : patient.m_doctors)
            out << *elem;*/

        return out;
    }
    friend class Doctor;
};


=====================자답============

이렇게 해결을 했는데 맞게 한건가요? ㅠㅠ

.h, .cpp로 선언과 정의를 분리하고

cpp에서 전부 인클루드하고

헤더 두 군데서 모두 전방선언 해줬습니다.

감사합니다.

답변 2

3

홍정모님의 프로필 이미지
홍정모
지식공유자

보통 이렇게 합니다만 전방선언으로 인해 링킹 에러가 발생하면 추적하기가 어렵기 때문에 저는 전방선언을 거의 사용하지 않습니다. 강의에서 언급을 했던 기억이 납니다. 이럴 때는 두 클래스를 모두 사용해서 업무를 수행하는 또 다른 클래스를 만들기도 합니다. 디자인 패턴 영역으로 슬슬 넘어가시는 것 같네요. 

0

호두님의 프로필 이미지
호두
질문자

감사합니다.

호두님의 프로필 이미지
호두

작성한 질문수

질문하기