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

조회수 3976회
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>

using namespace std;

class MyFriendInfo
{
private:
    char* name;
       int age;
public:
    MyFriendInfo(const char* fname, int fage) : age(fage) {
        name = new char[strlen(fname) + 1];
        strcpy(name, fname);
    }
    void ShowMyFriendInfo() {
        cout << "이름: " << name << endl;
        cout << "나이: " << age << endl;
    }
    ~MyFriendInfo() {
        delete []name;

    }
};

class MyFriendDetailInfo : public MyFriendInfo
{
private:
    char* addr;
    char* phone;

public:
    MyFriendDetailInfo(const char* fname, int fage, char* faddr, char* fphone) :MyFriendInfo(fname, fage) {
        addr = new char[strlen(faddr) + 1];
        phone = new char[strlen(fphone) + 1];
        strcpy(addr, faddr);
        strcpy(phone, fphone);
    }
    void ShowMyFriendDetailInfo() {
        ShowMyFriendInfo();
        cout << "주소: " << addr << endl;
        cout << "전화: " << phone << endl;
    }
    ~MyFriendDetailInfo() {
        delete []addr;
        delete []phone;
    }
};

int main(void) {
    MyFriendDetailInfo myFriend("이름", 23, "주소", "0107575455778");
    myFriend.ShowMyFriendDetailInfo();
    return 0;
}

윤성우의 C++ 교재로 공부하는 중인데 제일 밑에서 세번째 줄 ("이름", 부분에 빨간줄이 쳐지면서 오류 메세지가 뜹니다. 어떻게 해결할 수 있나요?

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

2 답변

  • 에러가 나는 이유는 "이름" 때문이 아니고, "주소"와 "0107575455778" 때문입니다.

    MyFriendDetailInfo(const char* fname, int fage, char* faddr, char* fphone) :MyFriendInfo(fname, fage)
    

    올려 주신 코드 중, 위의 MyFriendDetailInfo 클래스의 생성자 함수를 보시면 fname은 const char*로 되어 있고, faddr과 fphone은 char*로 되어 있습니다.

    아래와 같이 faddr과 fphone도 const char*로 작성해야 합니다. 혹시 책 코드 타이핑하다가 오타가 난 것이지 않을까 합니다.

    MyFriendDetailInfo(const char* fname, int fage, const char* faddr, const char* fphone) :MyFriendInfo(fname, fage)
    
    • 수정한 코드
    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    class MyFriendInfo
    {
    private:
        char* name;
        int age;
    public:
        MyFriendInfo(const char* fname, int fage) : age(fage) {
            name = new char[strlen(fname) + 1];
            strcpy(name, fname);
        }
        void ShowMyFriendInfo() {
            cout << "이름: " << name << endl;
            cout << "나이: " << age << endl;
        }
        ~MyFriendInfo() {
            delete[]name;
    
        }
    };
    
    class MyFriendDetailInfo : public MyFriendInfo
    {
    private:
        char* addr;
        char* phone;
    
    public:
        MyFriendDetailInfo(const char* fname, int fage, const char* faddr, const char* fphone) :MyFriendInfo(fname, fage) {
            addr = new char[strlen(faddr) + 1];
            phone = new char[strlen(fphone) + 1];
            strcpy(addr, faddr);
            strcpy(phone, fphone);
        }
        void ShowMyFriendDetailInfo() {
            ShowMyFriendInfo();
            cout << "주소: " << addr << endl;
            cout << "전화: " << phone << endl;
        }
        ~MyFriendDetailInfo() {
            delete[]addr;
            delete[]phone;
        }
    };
    
    int main(void) {
        MyFriendDetailInfo myFriend("이름", 23, "주소", "0107575455778");
        myFriend.ShowMyFriendDetailInfo();
        return 0;
    }
    
    • 결과

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • 사용하는 컴파일러 버전에 따라 다르긴 할텐데 이제는 묵시적인 형변환은 경고 혹은 에러를 냅니다.

    아래와 같이 명시적으로 char * 로 변환하세요.

    MyFriendDetailInfo myFriend((char *)"이름", 23, (char *)"주소", (char *)"0107575455778");
    

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

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

(ಠ_ಠ)
(ಠ‿ಠ)