我的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);
};
答案 0 :(得分:1)
我相信这是你问题的根源
temp = &table[k][i];
你不能拥有对象数组的多态性,因为它们都属于同一个类。
你已经省略了table的定义,但它可能应该是一个指针数组,它可以引用具有相同父类的不同类。
答案 1 :(得分:0)
访问冲突执行位置0x00000000。这意味着您正在取消引用null ptr(地址为0的指针)。因此访问冲突是您无法在位置0引用内存。要么是表为null,要么表[k]为null。确保使用brick初始化表ptrs。
同时检查“干杯和其他”评论以获得良好的编码建议。