【问题标题】:multidimensional array of objects in c++C ++中的多维对象数组
【发布时间】:2018-09-10 12:26:39
【问题描述】:

我正在写作业(创建虚拟世界),但遇到了一件我无法逾越的事情。我有类 Organism ,它是所有未来继承对象(动物等)的抽象,还有代表这些对象世界的 World 类。在后者中,我无法创建一系列有机体 - 存储每个现有有机体的位置。

它抛出: “语法错误:在‘token2’之前缺少‘token1’

我在想这可能与它相互引用有关(有机体引用了某个世界并且某个世界想要创建有机体数组)但默认构造函数正在解决这个问题。

你能告诉我监督了什么吗?提前致谢。

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;
        }
    }
} ....

Organism.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();
};

【问题讨论】:

  • 我没有在这段代码中看到错误。请注意,如果 sizeY 不是常量,则 new Organism[sizeX][sizeY] 将无法在没有非标准扩展的情况下工作。请发帖minimal reproducible example
  • worldMesh 是一个指针。它不是二维数组。如果您希望它知道它的形状,请使用 std::array 或 std::vector。
  • @Wally 即使它们是不变的也不会起作用。不能指向这样的二维数组。
  • 不相关。里面有很多指针。记住指针的一大缺点:必须有人清理。你确定要指针吗?

标签: c++ class multidimensional-array


【解决方案1】:

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

【讨论】:

  • 最好翻转 vectorvector 和数组示例数组,以获得最好的第一个。
  • 按照您所展示的那样分配数组效率极低且容易出错。 Here is a better way of doing this
  • @PaulMcKenzie 我同意。我只是展示了该问题的可能解决方案。我的第三个变体和你的提议类似。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 2019-04-13
  • 2017-10-22
相关资源
最近更新 更多