c++ 생성자 관련 질문

조회수 6330회
#include <iostream>
#include <cstring>

using namespace std;

namespace COMP_POS {
    enum {
        CLERK = 1, SENIOR, ASSIST, MANAGER
    };

    void ShowPositionInfo(int pos)
    {
        switch (pos) {
        case CLERK:
            cout << "사원" << endl;
            break;
        case SENIOR:
            cout << "주임" << endl;
            break;
        case ASSIST:
            cout << "대리" << endl;
        case MANAGER:
            cout << "과장" << endl;
        }
    }
}

class NameCard {
private:
    char * name;
    char * company;
    char * phone;
    int position;
public:
    NameCard(char * name, char * company, char * phone, int mypos) : position(mypos)
    {
        this->name = new char[strlen(name) + 1];
        strcpy(this->name, name);
        this->company = new char[strlen(company) + 1];
        strcpy(this->company, company);
        this->phone = new char[strlen(phone) + 1];
        strcpy(this->phone, phone);
    }
    NameCard(const NameCard &copy) : position(copy.position)
    {
        name = new char[strlen(copy.name) + 1];
        strcpy(name, copy.name);
        company = new char[strlen(copy.company) + 1];
        strcpy(company, copy.company);
        phone = new char[strlen(copy.phone) + 1];
        strcpy(phone, copy.phone);
    }
    void ShowNameCardInfo()
    {
        cout << "이름 : " << name << endl;
        cout << "회사 : " << company << endl;
        cout << "전화번호 : " << phone << endl;
        cout << "직급 : ";
        COMP_POS::ShowPositionInfo(position);
        cout << endl << endl;
    }
    ~NameCard()
    {
        delete[]name;
        delete[]company;
        delete[]phone;
        cout << "called destructor!" << endl;
    }
};

int main()
{
    NameCard manClerk("Lee", "ABC", "010-8200-6545", COMP_POS::CLERK);
    NameCard copy1 = manClerk;
    NameCard manSenior("Hong", "Organge", "01-8222-54545", COMP_POS::SENIOR);
    NameCard copy2 = manSenior;
    copy1.ShowNameCardInfo();
    copy2.ShowNameCardInfo();
    return 0;
}

윤성우의 열혈 c++ 프로그래밍을 교재삼아 공부하고 있는 중입니다. 위는 예제 중 하나를 푼 것인데 main함수에서 manClerk 과 manSenior 부분에서 각각 "Lee" 와 "Hong"에서 붉은 줄이 쳐지면서

인수 목록이 일치하는 생성자 "NameCard::NameCard"의 인스턴스가 없습니다.

라는 오류가 뜹니다...

책의 답안과 다른 것이 없는데 왜 이런 오류가 생길까요...?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    교재에 문제가 있는듯 합니다. NameCard 생성자를 보시면 인수가 char* 타입으로 되어있는데, 문자열 리터럴 "abcd" 등은 const char*으로만 받을수 있습니다. 따라서 모든 char*에 const 를 추가하셔야합니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)