-1

我有这个,在我的标题中:

    struct Surface {
        char *objectName;
        int xPos;
        int yPos;
        SDL_Surface *surface;
    };

    struct WorldSurface {
        Surface *surface = new Surface[MAX_SURFACES];
        int counter = 0;
        int current = 0;
    };

    WorldSurface *worldSurface;

然后我在 .cpp 中初始化 worldSurface:

    WorldSurface *worldSurface = new WorldSurface[MAX_LEVELS];

而这个函数,无论如何我都无法开始工作,尝试过使用= NULL,指针,->而不是.'s ...(请记住,我对指针主题不太了解)

    void drawClass::addSurface(char* objectName, char* surfaceFile, int xPos, int yPos, int drawLevel) {
        int cnt = worldSurface[drawLevel].counter;
        worldSurface[drawLevel].surface[cnt].objectName = objectName;
        worldSurface[drawLevel].surface[cnt].surface = load_image(surfaceFile);
        worldSurface[drawLevel].surface[cnt].xPos = xPos;
        worldSurface[drawLevel].surface[cnt].yPos = yPos;
        worldSurface[drawLevel].counter++;
    }

它有 10 个 worldSurface,每个包含 50 个表面结构,我想访问位于 worldSurface[drawLevel] 内部的结构,并且我想访问的表面结构在 worldSurface 中的 .counter 变量中是已知的。但是所有对底层表面结构的访问都因分段错误而失败,我不知道为什么......

谢谢您的帮助!

4

1 回答 1

1

WorldSurface的未正确定义或初始化:

struct WorldSurface {
    Surface *surface = new Surface[MAX_SURFACES];
    int counter = 0;
    int current = 0;
};

您不能将数据与类的声明一起初始化。您需要在构造函数中执行此操作,例如:

struct WorldSurface {
    Surface *surface;
    int counter;
    int current;
};
...
WorldSurface::WorldSurface():
    counter(0),current(0),surface(new Surface[MAX_SURFACES]){}
于 2012-12-12T06:20:23.253 回答