C ++多态,虚函数错误

时间:2014-04-27 20:59:00

标签: c++ visual-studio-2013

我的C ++项目的虚方法遇到了问题。

首先,我得到了类图形,其中包含:

#pragma once
class gameGraphics
{
public:
    gameGraphics();
    ~gameGraphics();
    virtual void paint();
};

我有两个班,第一个:

class brick 
    : public gameGraphics
{
protected:
    int R, G, B;
    bool ifDelete;
public:
    brick();
    ~brick();
    virtual void paint(int x, int y);
};

第二个:

class superBrick :
    public brick, public gameGraphics
{
private:
    int bonusType;
public:
    superBrick();
    ~superBrick();
    void paint(int x, int y);
};

然后我试图绘制这两个类的对象,当我的项目运行时它显示错误:" project.exe中的0x74D3CB49处的未处理异常:0xC0000005:访问冲突执行位置0x00000000。",同时尝试superBrick对象的绘制函数。

for (int i = 0; i < WIDTH; i++)
{
    for (int k = 0; k < LENGTH; k++)
    {
        temp = &table[k][i];
        temp->paint(k, i);
    }
}

我不知道这个错误的原因是什么,我认为我的多态性很好。

对不起我的英文,感谢阅读和帮助!

祝你晚安!

编辑:

这里的表类:

class gameTable : public gameGraphics
{
private:
    brick** table;
public:
    gameTable();
    ~gameTable();
    void paint(int CordX, int cordY);   
};

2 个答案:

答案 0 :(得分:1)

我相信这是你问题的根源

    temp = &table[k][i];

你不能拥有对象数组的多态性,因为它们都属于同一个类。

你已经省略了table的定义,但它可能应该是一个指针数组,它可以引用具有相同父类的不同类。

答案 1 :(得分:0)

访问冲突执行位置0x00000000。这意味着您正在取消引用null ptr(地址为0的指针)。因此访问冲突是您无法在位置0引用内存。要么是表为null,要么表[k]为null。确保使用brick初始化表ptrs。

同时检查“干杯和其他”评论以获得良好的编码建议。