错误C2512& C3892 - 像游戏一样建立PacMan

时间:2015-04-28 12:07:41

标签: c++ variables constructor const default-constructor

我对编程比较陌生,所以请记住这一点。 我目前正在用C ++构建一个类似2D PacMan的游戏但是我遇到了上述错误。我试图在我的游戏中实现一些僵尸,我已经声明它是一个带有数组的'Item'来表示游戏中允许的最大僵尸数量。以下是我的代码的一些示例(这已被缩减为仅显示僵尸代码的有限部分):

const char ZOMBIE('Z');
const int MAXZOMBIES(4);

int main()
{
    Item zombies[MAXZOMBIES];
    int numZombies(4);
}

void setZombiesInitialCoordinates(Item zombies[])
{
    //Setting zombie coordinates for top left of grid
    zombies[0].symbol = ZOMBIE;
    zombies[0].x = (SIZEX - 19);
    zombies[0].y = (SIZEY - 11);

    //Setting zombie coordinates for top right of grid
    zombies[1].symbol = ZOMBIE;
    zombies[1].x = (SIZEX - 2);
    zombies[1].y = (SIZEY - 11);

    //Setting zombie coordinates for bottom left of grid
    zombies[2].symbol = ZOMBIE;
    zombies[2].x = (SIZEX - 19);
    zombies[2].y = (SIZEY - 2);

    //Setting zombie coordinates for bottom right of grid
    zombies[3].symbol = ZOMBIE;
    zombies[3].x = (SIZEX - 2);
    zombies[3].y = (SIZEY - 2);
}

如果这会使事情变得更容易,可以在pastebin上查看整个代码:http://pastebin.com/1kFTD2Mr

非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

您忘记包含相关的课程定义:

struct Item {
        const char symbol;
        int x, y;
};

和错误消息:

C2512: no appropriate default constructor available
C3892: you cannot assign to a variable that is const

symbolconst因此,正如第二条错误消息所示,您无法分配给它。 const成员也会阻止默认构造,因为这样就无法给成员一个有效的值;因此第一个错误。

您可以删除const;或者,如果你想保留它,你必须用它们的值初始化项目,而不是在初始化后分配给它们:

Item zombies[] = {
    {ZOMBIE, SIZEX - 19, SIZEY - 11},
    {ZOMBIE, SIZEX -  2, SIZEY - 11},
    {ZOMBIE, SIZEX - 19, SIZEY -  2},
    {ZOMBIE, SIZEX -  2, SIZEY -  2}
};