【问题标题】:class defined variable can't be found by class function类函数找不到类定义的变量
【发布时间】:2013-05-25 22:41:49
【问题描述】:

“block.h”

enum BlockType
{
    BlockType_Default = 0,
    BlockType_Grass,
};

class Block
{
public:
    Block();
    ~Block();

    bool IsActive();
    void SetActive(bool activeParameter);
private:
    bool active;
    BlockType m_blockType;
};

“block.cpp”

#include "block.h"

Block::Block()
{
    m_blockType = BlockType_Grass;
    active = true;
}

Block::~Block()
{

}

bool Block::IsActive()
{

     return active;
}

void Block::SetActive(bool activeParameter)
{
    active = activeParameter;
}

这是我的课。现在我的问题是当我运行程序并调用IsActive(); 函数时,我在检查active 是否为真的行上收到错误EXC_BAD_ACCESS (code=1, address = 0x0)。从我读到的是如果变量不存在则返回的内容。我的代码有什么问题?

这里是我调用函数的地方 main.cpp

Block* m_pBlocks[32][32][32];

void main()
{
    for(int x = 0; x < 32; x++)
    {
        for(int y = 0; y < 32; y++)
        {
            for(int z = 0; z < 32; z++)
            {
                printf("x:%d y:%d z:%d",x,y,z);
                if(m_pBlocks[x][y][z]->IsActive())
                {
                    //DisplayBlock
                }
            }
        }
    }


}

【问题讨论】:

  • 无关,但return active;
  • 您没有粘贴出现错误的代码,您致电IsActive。最有可能的是,您错误地调用了IsActive,例如通过取消引用未初始化的指针。 (而且,正如 Chris 所指出的,你可怕的 IsActive 函数可以重写为 return active;。)
  • @chris:+1 表示“无关,但返回活跃;” - 让它const
  • 您实际上是在为m_pBlocks 中的指针实例化对象吗?如果没有,那么这是你的问题。如果是这样,请在您执行此操作的位置显示代码,以便我们查看问题是否存在。
  • @TylerMcHenry 听听你脑后那个小小的声音。你知道答案会是什么;)

标签: c++ class enums


【解决方案1】:

此声明

Block* m_pBlocks[32][32][32];

定义 32 x 32 x 32 NULL 指针。因此,当您尝试 -> 那些 NULL 指针时,它会失败。

您要么需要创建块,要么分配它们:

Block m_pBlocks[32][32][32];

Block* m_pBlocks[32][32][32];
m_pBlocks[x][y][z] = new Block;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 2015-02-15
    • 2016-02-29
    相关资源
    最近更新 更多