윤성우의 열혈 c++ 예제 123~124P를 따라했습니다.
해당 페이지는 클래스를 본격적으로 배우게 되는 구간입니다.
---해당 예제의 코드 전문---
#include <iostream>
#include <cstring>
using namespace std;
namespace CAR_CONST
{
enum
{
ID_LEN = 20,
MAX_SPD = 200,
FUEL_STEP = 2,
ACC_STEP = 10,
BRK_STEP = 10
};
}
class Car
{
private:
char gamerID[CAR_CONST::ID_LEN];
int fuelGauge;
int curSpeed;
public:
void InitMembers(char * ID, int fuel);
void ShowCarState();
void Accel();
void Break();
};
void Car::InitMembers(char * ID, int fuel)
{
strcpy(gamerID, ID);
fuelGauge = fuel;
curSpeed = 0;
};
void Car::ShowCarState()
{
cout << "소유자ID: " << gamerID << endl;
cout << "연료량: " << fuelGauge << "%" << endl;
cout << "현재속도: " << curSpeed << "km/s" << endl << endl;
}
void Car::Accel()
{
if (fuelGauge <= 0)
return;
else
fuelGauge -= CAR_CONST::FUEL_STEP;
if ((curSpeed + CAR_CONST::ACC_STEP) >= CAR_CONST::MAX_SPD)
{
curSpeed = CAR_CONST::MAX_SPD;
return;
}
curSpeed += CAR_CONST::ACC_STEP;
}
void Car::Break()
{
if (curSpeed < CAR_CONST::BRK_STEP)
{
curSpeed = 0;
return;
}
curSpeed -= CAR_CONST::BRK_STEP;
}
int main(void)
{
Car run99;
run99.InitMembers("run99", 100);
run99.Accel();
run99.Accel();
run99.Accel();
run99.ShowCarState();
run99.Break();
run99.ShowCarState();
return 0;
}
-------------------------------
출력결과
소유자ID: run99
연료량: 94%
현재속도: 30km/s
소유자ID: run99
연료량: 94%
현재속도: 20km/s
--------------------------------
여기서 문제가 되는 코드가
void Car::InitMembers(char * ID, int fuel)
{
strcpy(gamerID, ID);
fuelGauge = fuel;
curSpeed = 0;
};
int main(void)
{
Car run99;
run99.InitMembers("run99", 100); // run99 문자열을 받아들이지 못함.
run99.Accel();
run99.Accel();
run99.Accel();
run99.ShowCarState();
run99.Break();
run99.ShowCarState();
return 0;
}
main함수의 저 볼드체 해놓은 부분에서 문제가 발생합니다.
비주얼 스튜디오에서 안돌아가서 혹시 몰라 온라인 컴파일 사이트에서 돌려봤는데
근데 여긴 또 잘 돌아가요
물론 "run99" 이 부분에 경고 표시가 뜨긴 했습니다.
ISO C++11 does not allow conversion from string literal to 'char *'
경고에는 이렇게 써져있는데, 이게 왜 c++11에서 허용이 안되는지,
그리고 c++11 이상 버전에서는 저 부분을 어떻게 대체해야 하는지 궁금함.