我正在制作一个类似于 Minecraft 的游戏,其中所有不同的块都由static const Block <name>;
.h 文件中的单个块表示。我在 .cpp 文件中将它们初始化为const Block Block::<name> = Block("name", 0, 0);
,并在构造函数中传入它使用的纹理的索引(表示为无符号字符)。在构造函数中,它设置了索引变量,但是当我稍后在程序中尝试调用它时,它返回一个完全不同的值。
以下是重要部分:
Block::Block(std::string name, uint16 id, uint8 tex)
{
//Check for repeat ids
if (IdInUse(id))
{
fprintf(stderr, "Block id %u is already in use!", (uint32)id);
throw std::runtime_error("You cannot reuse block ids!");
}
_id = id;
idMap.insert(std::make_pair(id, *this));
//Check for repeat names
if (NameInUse(name))
{
fprintf(stderr, "Block name %s is already in use!", name);
throw std::runtime_error("You cannot reuse block names!");
}
_name = name;
nameMap.insert(std::make_pair(name, *this));
_tex = tex;
fprintf(stdout, "Using texture %u\n", _tex);
_transparent = false;
}
uint8 Block::GetIndex() const
{
fprintf(stdout, "Returning texture %u\n", _tex);
return _tex;
}
我将 0 作为 传递给构造函数tex
,并_tex
在分配打印出 0 后打印,所以我知道它在构造函数中正确设置。但是,当程序GetIndex()
稍后调用时,由于某种原因,它总是返回 204。我不知道它为什么这样做,但我认为这可能与我声明所有 Blocks 为static const
. 另外,我知道 _tex 的值没有改变,因为对象是const
并且 Block 在初始化后没有以任何方式进行操作。
如果有人知道可能导致这种情况的原因,我们将不胜感激任何帮助。
编辑:
在 Block.h 中,这是声明块的行,取自内部class Block
:
public:
static const Block Test;
然后在 Block.cpp 中,这是文件顶部的一行:
const Block Block::Test = Block("Test", 1, 0);