簡體   English   中英

C ++多態性,虛函數錯誤

[英]C++ polymorphism, virtual functions error

我在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);
};

然后,我嘗試繪制這兩個類的對象時,當我的項目運行時,它顯示錯誤:“嘗試為superBrick對象繪制函數時,“ project.exe中0x74D3CB49的未處理異常:0xC0000005:執行位置0x00000000的訪問沖突。”

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);   
};

我相信這是您問題的根源

    temp = &table[k][i];

您不能對對象數組具有多態性,因為它們都屬於同一類。

您已經省略了表的定義,但是它可能應該是一個指針數組,該指針數組可以引用具有相同父類的不同類。

訪問沖突執行位置0x00000000。 這意味着您要取消引用一個空ptr(地址為0的指針。因此,訪問沖突是您無法在位置0處引用內存。table為null或table [k]為null。請確保使用Brick初始化了table師生比。

還要檢查“干杯和hth”注釋,以獲得良好的編碼建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM