class CFire
{
public:
int x,y;
bool die;
int  speed;
int  type;
void init(int cx,int cy,int ctype);
};class Mario
{
public:
int x,y;
int live;
int level;
long money;
int  speed;
CFire *m_pFire[MAX_NPC];
void init();
void draw();
void move(int direct);
void createFire();
virtual ~Mario();
private:
int  i;
};//执行这个成员函数就出错,为什么?
void Mario::createFire()
{
m_pFire[i] = new CFire;
m_pFire[i]->init(x,y,1);
i++;
}

解决方案 »

  1.   

    调试一下,我怀疑你的 i >= MAX_NPC。发生了数组下表越界
      

  2.   

    在编辑代码的时候,在输完m_pFire[i]->之后,应该能看到提示信息的,但是什么都看不到。执行的时候没有出现信息就退出来了。
      

  3.   

    CFire *m_pFire[MAX_NPC];
    ==>
    CFire m_pFire[MAX_NPC];
      

  4.   

    class CFire
    {
    public:
    int x,y;
    bool die;
    int  speed;
    int  type;
    void init(int cx,int cy,int ctype);
             CFire();  //添加一个构造函数
    };class Mario
    {
    public:
    int x,y;
    int live;
    int level;
    long money;
    int  speed;
    CFire *m_pFire[MAX_NPC];
    void init();
    void draw();
    void move(int direct);
    void createFire();
    virtual ~Mario();
    private:
    int  i;
    };//执行这个成员函数就出错,为什么?
    void Mario::createFire()
    {
    //m_pFire[i] = new CFire;
             m_pFire[i]=new CFire(); //加个括号
    m_pFire[i]->init(x,y,1);
    i++;
    }这样修改应该就可以了
      

  5.   

    //定义成全局变量   就不会出错(编译会初始化i==0)
    Mario mac;
    xxx()
    {
       mac.createFire();
    }//定义成内部变量   就会出错(i=???),定义一个构造函数吧
    xxx()
    {
       Mario mac;
       mac.createFire();
    }
      

  6.   

    CFire *m_pFire[MAX_NPC] 是不是没有分配内存空间??
    还是改成 CFire **m_pFire吧,在初始化是分配空间
    m_pFire = (CFire **)GlobalAlloc(GPTR, sizeof(CFire)*MAX_NPC);void Mario::createFire()
    {        
             CFire * p = new CFire;
    m_pFire[i] = p;
    m_pFire[i]->init(x,y,1);
    i++;
    }
      

  7.   

    同意 webber84(糕鱼昏)的看法,我想是你在定义CFire *m_pFire[MAX_NPC];的时候多加了个*号:)
      

  8.   

    错误找到了,是数组下标越界。但是我更关心的是:
    在编辑代码的时候,在输完m_pFire[i]->之后,应该能看到提示信息的,但是什么都看不到。这是什么原因?