C 中的对象的多维阵列

multidimensional array of objects in c++

本文关键字:阵列 对象      更新时间:2023-10-16

我正在写作业(创建虚拟世界(,而且我遇到了一件我无法浏览的事情。我有阶级生物体,它是所有未来继承的生物(动物等(和阶级世界,代表这些物体的世界。在后者中,我无法创建一系列生物 - 存储每个现有生物的位置。

它投掷:"语法错误:缺少'token1''token2'

我在想,也许这与彼此有关(有机体提到某些世界,某些世界想要创建各种有机体(,但是默认的构造器正在解决IMO。

你能告诉我我监督什么吗?预先感谢。

world.h

#pragma once
class World
{
private:
    int sizeX;
    int sizeY;
    Organism * worldMesh;
public:
    World(int sizeX, int sizeY);
    void nextTurn();
    void drawWorld();
    int getWorldX();
    int getWorldY();
~World();
};

world.cpp

#include "stdafx.h"
#include "World.h"
#include <iostream>
using namespace std;
World::World(int sizeX, int sizeY)
{
    this->sizeX = sizeX;
    this->sizeY = sizeY;
    worldMesh = new Organism[sizeX][sizeY];
    for (int i = 0; i < sizeX; i++) {
        for (int j = 0; j < sizeY; j++) {
            worldMesh[i][j] = NULL;
        }
    }
} ....

有机体.h

#pragma once
#include "World.h"
#include "Position.h"

class Organism
{
protected:
    int strength;
    int initiative;
    Position * position;
    static World * world;
public:
    Organism();
    Organism(World * world);
    int randValue();
    virtual void spawn();
    virtual void action();
    virtual void collision();
    void kill();
    virtual ~Organism();
};

C 中没有这样的new Type[size1][size2]构造,但是您可以做这样的事情:

int** mesh = new int*[size1];
for( int i = 0; i < size1; i++ ) {
    mesh[i] = new int[size2];
    for( int j = 0; j < size2; j++ ) {
        mesh[i][j] = 0;
    }
}

或仅使用std::vector

std::vector< std::vector<Type> > mesh;

或使用尺寸size1 * size2的单个std::vector,然后通过ij计算索引:index = i * size1 + j