【问题标题】:Why can't I fill this 2D array in C++?为什么我不能用 C++ 填充这个二维数组?
【发布时间】:2016-03-30 04:10:12
【问题描述】:
    Chunk** chunks[8][8];


    World () : Scene () {
        for (int xx = 0; xx < sizeof(this->chunks)-1; xx++) {
            for(int yy = 0; yy < sizeof(this->chunks[xx])-1; yy++) {

                /* Here is where I get compilation errors */
                this->chunks[xx][yy] = new Chunk(0.1f , 0.1f);
            }
        }
    }

“大小为 8 的无效写入”和“无法将‘Chunk*’转换为‘Chunk**’

Chunk 构造函数采用两个浮点数(浮点数 x,浮点数 y)。 我应该如何填充这个二维数组?

(刚开始学C++,之前写过Java)

【问题讨论】:

  • 不用* 符号。不要使用sizeof。作为风格问题,不要使用this-&gt;。您可以使用std::vector。它简化了事情。
  • 谢谢!!!我以为“sizeof”返回了数组的长度,但我错了。我用 sizeof(chunks)/sizeof(*chunks) 替换它,一切都编译好了!

标签: c++ arrays compiler-errors assign


【解决方案1】:

new Chunk(0.1f, 0.1f) 返回了什么? Chunk* 类型的指针。

this-&gt;chunks[xx][yy] 的类型是什么?二维数组中的一个元素,类型为 Chunk**

由于类型安全,您不能将 Chunk* 分配给 Chunk**

Chunk** chunks[8][8]; 更改为Chunk* chunks[8][8];

【讨论】:

  • 这解决了转换错误,但现在当我编译它时,我得到“核心转储”。如果我使用 valgrind 运行“a.out”文件,它会打印一个错误:“Invalid write of size 8”
【解决方案2】:

chunks[][] 数组中的每个项目都有 Chunk** 类型,但 new Chunk() 运算符返回指向 Chunk (Chunk*) 的指针,这就是您无法将“Chunk*”转换为“Chunk**”错误的原因。

要解决这个问题,您应该重新声明块:

Chunk* chunks[8][8];

【讨论】:

  • 这解决了转换错误,但现在当我编译它时,我得到“核心转储”。如果我使用 valgrind 运行“a.out”文件,它会打印一个错误:“Invalid write of size 8”
  • 发布导致问题的完整代码。我还注意到您使用 xx chunks)-1 条件进行数组初始化,而它显然应该是 xx chunks),可能是您的错误是由访问未初始化的指针引起的。
【解决方案3】:

Declaration 指针不接受初始化。

块*块;很好,你可以说 chunk = new int[8][8] 或 ...

例如,指针使用的简单示例: http://www.cplusplus.com/forum/general/9508/

对于转换错误,如果你使用的是 struct 或 class ,我可以建议 *** 可以被认为是指针 pointest a plointer;在你的情况下是二维数组。

【讨论】:

    猜你喜欢
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 2021-05-04
    • 2014-10-03
    相关资源
    最近更新 更多