윤성우의 열혈 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 이상 버전에서는 저 부분을 어떻게 대체해야 하는지 궁금함.