while (1): study();
[C++]'const char [14]'에서 'char *'(으)로 변환할 수 없습니다. 본문
728x90
아래 코드를 실행 시 예외가 발생한다.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;
class Person
{
private:
char* name;
int age;
public:
Person(char* myname, int myage)
{
int len = strlen(myname) + 1;
name = new char[len];
strcpy(name, myname);
age = myage;
}
void ShowPersonInfo() const
{
cout << "이름: " << name << endl;
cout << "나이: " << age << endl;
}
~Person()
{
delete[] name;
}
};
int main(void)
{
Person man1("Lee dong woo", 29);
Person man2("Jang dong gun", 41);
man1.ShowPersonInfo();
man2.ShowPersonInfo();
return 0;
}
예외 내용은 구체적으로 다음과 같다.
error C2664: 'Person::Person(char *,int)': 인수 1을(를) 'const char [14]'에서 'char *'(으)로 변환할 수 없습니다.
message : 문자열 리터럴로부터의 변환은 const 한정자가 손실됩니다(/Zc:strictStrings 참조).
즉, 객체 생성자 호출 과정에서 문자열을 넘겼는데 이 문자열의 형식은 const char 배열이고, 너는 지금 char 배열로 받으려고 한다는 것이다.
이는 C와 C++의 차이점인데, C++에서는 문자열을 문자 상수의 배열로 받는다.
따라서 생성자의 매개변수의 자료형을 char*가 아닌 const char*로 정의하면 정상적으로 실행 가능하다.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;
class Person
{
private:
char* name;
int age;
public:
Person(const char* myname, int myage)
{
int len = strlen(myname) + 1;
name = new char[len];
strcpy(name, myname);
age = myage;
}
void ShowPersonInfo() const
{
cout << "이름: " << name << endl;
cout << "나이: " << age << endl;
}
~Person()
{
delete[] name;
}
};
int main(void)
{
Person man1("Lee dong woo", 29);
Person man2("Jang dong gun", 41);
man1.ShowPersonInfo();
man2.ShowPersonInfo();
return 0;
}
728x90
'학습 > C, C++' 카테고리의 다른 글
error LNK2019 해결법 (0) | 2021.12.24 |
---|---|
[C++] 복사생성자의 호출 시기 (0) | 2021.12.20 |
[C++] 정보은닉과 캡슐화 (0) | 2021.12.19 |
구조체에 대한 new & delete 연산 (0) | 2021.12.19 |
[C++] call-by-address와 call-by-reference (0) | 2021.12.18 |
Comments