0

昨夜作業していたのと同じコードで、まったく新しいエラーが発生しました。これまでに遭遇したことのないもので、PC に物を投げることを検討している段階です。しかし、昨夜はここにいる皆さんがとても助けになってくれたので、この新しい問題について何かアイデアを持っている人がいないか調べてみようと思いました。

何かが原因で「Microsoft C++ 例外: std::bad_alloc」が発生しており、main.cpp の最初の行にあると思いますが、それはプレイヤーを Hero (クリーチャーの子) クラスとして作成しているだけです。なぜそれができないのかわかりません。

私が悪いことをしたのはおそらくばかげたことだと思います...しかし、どんな助けもいただければ幸いです!

//main.cpp

#include "Creature.h"
#include "Hero.h"
#include "Monster.h"
#include <conio.h>

using namespace std;

int main()
{
    Hero player(1);
    Monster baddie;

    player.setX(1);
    player.setY(1);

    baddie.setX(20);
    baddie.setY(20);

    player.Display();
    baddie.Display();

    baddie.chase(player);
    player.Display();
    baddie.Display();

    _getch();
    return 0;
}


===================================

//Creature.h

#pragma once

#include <iostream>
#include <string>

using namespace std;

class Creature
{
protected:
    int m_xpos;
    int m_ypos;
    string m_name;

public:
    Creature(string name, int xpos, int ypos);
    void Display(void);
    void left(void);
    void right(void);
    void up (void);
    void down(void);
    void setX(int x);
    void setY(int y);
    int getX(void);
    int getY(void);
};


===================================

//monster.h

#pragma once
#include "Creature.h"

class Monster : public Creature
{
public:
    Monster();
    void chase(class Hero);
    bool eaten(class Hero);
};

===================================

//Hero.h

#pragma once
#include "Creature.h"

class Hero : public Creature
{
private:
    int m_lives;
    int m_score;

public:
    Hero(int lives);
    void Display(void);
    void setScore(void);
};

===================================

//creature.cpp

#include "Creature.h"

Creature::Creature(string name, int xpos, int ypos)
{
    m_xpos = xpos;
    m_ypos = ypos;
    m_name = name;
}

void Creature::Display(void)
{
    cout << m_name << endl;
    cout << m_xpos << endl;
    cout << m_ypos << endl;
}

void Creature::left(void)
{
    m_xpos = m_xpos+1;
}

void Creature::right(void)
{
    m_xpos = m_xpos-1;
}

void Creature::up(void)
{
    m_ypos = m_ypos-1;
}

void Creature::down(void)
{
    m_ypos = m_ypos+1;
}

void Creature::setX(int x)
{
    m_xpos = x;
}

void Creature::setY(int y)
{
    m_ypos = y;
}

int Creature::getX(void)
{
    return m_xpos;
}

int Creature::getY(void)
{
    return m_ypos;
}

===================================

//Hero.cpp

#include "Creature.h"
#include "Hero.h"

Hero::Hero(int lives) : Creature(m_name, m_xpos, m_ypos)
{
    m_lives = lives;
}

void Hero::Display(void)
{
    Creature::Display();
    cout << "Lives: " << m_lives << endl;
    cout << "Score: " << m_score << endl;
}

void Hero::setScore(void)
{
    m_score = 0;
}

===================================

//Monster.cpp

#include "Creature.h"
#include "Monster.h"
#include "Hero.h"

Monster::Monster() : Creature(m_name, m_xpos, m_ypos)
{
}

void Monster::chase(Hero hero)
{
    if(getX() < hero.getX())
    {
        right();
    }

    if(getX() > hero.getX())
    {
        left();
    }

    if(getX() < hero.getX())
    {
        down();
    }

    if(getX() >hero.getX())
    {
        up();
    }
}

bool Monster::eaten(Hero hero)
{

    if((getX() == hero.getX())&&(getX() == hero.getX()))
    {
        return true;
    }
}


===================================

問題はHero::Hero(int lives) : Creature(m_name, m_xpos, m_ypos)、Monster.cpp ファイルにありました。

それらを変更してHero::Hero(int lives) : Creature("", 0,0)メモリの問題を修正しました。

素晴らしいコミュニティに改めて感謝します!

願わくば、このコードが再び表示されることはありません。(成功を祈っている!)

4

1 に答える 1

3

エラーは次の行にあります。

Hero::Hero(int lives) : Creature(m_name, m_xpos, m_ypos)

Creature独自の初期化されていないデータ メンバーを渡してサブオブジェクトを作成することはできません。Creature("", 0, 0)たとえば、ある種の有効な値を基本クラスのコンストラクターに渡す必要があります。

初期化されていないオブジェクトをコピーしようとすると、エラーが発生しstd::stringます。

于 2013-10-20T03:10:49.360 に答える