c++초보 질문드립니다 클래스문을 이용하여 능력치를 랜럼함수로 배분하고 캐릭터와 몬스터를 만들어 게임을만드는것인데 c2659에러가떠서 질문드립니다

조회수 1225회

헤더 파일입니다

pragma once
class character
{
private:
    int m_HP;
    int m_MP;
    int m_ATK;
    int m_Def;
public:
    character();

    ~character();
    void setHP(int m_HP);
    int hp()
    {
        return m_HP;
    }
    void setMP(int m_MP);
    int mp()
    {
        return m_MP;
    }
    void setatk(int m_ATK);
    int atk()
    {
        return m_ATK;
    }
    void setdef(int m_Def);
    int def()
    {
        return m_Def;
    }
};
cpp입니다

include"character.h"
include"COMMON.h"
character::character()
{

}
character::~character()
{

}
void character::setHP(int hp)
{
    m_HP = hp;
}
void character::setMP(int mp)
{
    m_MP = mp;
}
void character::setatk(int atk)
{
    m_ATK = atk;
}
void character::setdef(int def)
{
    m_Def = def;
}
메인 함수입니다
void main()
{
        character *player = new character[a];
    character *monster = new character[a];
void stat(character *p, int a, int b)
{

    p->atk = rand() % a + b;//='함수를 왼쪽 피연산자로 사용했습니다
    p->def = rand() % a;//='함수를 왼쪽 피연산자로 사용했습니다
    p->hp = rand() % a + b;//='함수를 왼쪽 피연산자로 사용했습니다
    p->mp = rand() % b;//"'='함수를 왼쪽 피연산자로 사용했습니다 "
}
}

저기에 전체적으로 c2659에러가 뜨는데 검색을 해보고 책을 읽어봐도 해결방안을 도저히 모르겠어서 질문드립니다 전체로 다올리면 보기 너무 힘드실것 같아서 중간 생략 해서 올립니다 필요하시다면 더올려드리겟습니다

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

1 답변

  • main 함수를 잘못 올려 주신 것 같네요.

    void stat(character *p, int a, int b)
    {
        p->atk = rand() % a + b;//='함수를 왼쪽 피연산자로 사용했습니다
        p->def = rand() % a;//='함수를 왼쪽 피연산자로 사용했습니다
        p->hp = rand() % a + b;//='함수를 왼쪽 피연산자로 사용했습니다
        p->mp = rand() % b;//"'='함수를 왼쪽 피연산자로 사용했습니다 "
    }
    
    void main()
    {
        character *player = new character;
        character *monster = new character;
    
        int a = 0, b = 1;
        stat(player, a, b);
        stat(monster, a, b);
        //...
    }
    

    위와 같은 내용일 거라 생각하고 답변 드리겠습니다.

    여기서 p->atk = rand() % a + b; 을 보면, 멤버 함수에 정수를 대입하고 있습니다. 함수는 변수가 아니기 때문에 대입할 수 없습니다.

    멤버 변수에 대입하는 식으로 변경해야 하나 멤버 변수는 private 이기 때문에 작성하셨던 set** 멤버 함수를 사용하도록 변경해야합니다.

    void stat(character *p, int a, int b)
    {
        p->setatk(rand() % a + b);//='함수를 왼쪽 피연산자로 사용했습니다
        p->setdef(rand() % a);//='함수를 왼쪽 피연산자로 사용했습니다
        p->setHP(rand() % a + b);//='함수를 왼쪽 피연산자로 사용했습니다
        p->setMP(rand() % b);//"'='함수를 왼쪽 피연산자로 사용했습니다 "
    }
    
    • 정말감사합니다 근데 확인은 지금당장 못하고 내일 해야할것같네요 정말감사합니다 알 수 없는 사용자 2018.5.12 21:08

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

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

(ಠ_ಠ)
(ಠ‿ಠ)