인수목록이 일치하는 생성자의 인스턴스가 없습니다.
조회수 3978회
#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");
댓글 입력