You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt C++如何创建内含Plant类二维数组的Garden类

问题分析
  • 类成员plantarray类型定义错误:你当前声明的是单个Plant类实例,无法存储二维数组结构
  • 动态二维原生数组创建语法不标准:C++标准要求原生二维数组的第二维必须是编译期常量,用运行期才确定的gardenSize作为第二维属于编译器非标准扩展,无法跨编译器通用
  • 缺少指针类型匹配:你需要plantarray[x][y]可判断是否为nullptr,说明二维数组的每个元素应为Plant*类型,当前定义完全不匹配
可行实现方案

方案1:Qt容器实现(推荐,无需手动管理内存)

用Qt自带的QVector容器实现,语法和你预期的调用方式完全一致,自动处理内存分配释放,不会出现内存泄漏问题。

头文件(garden.h)修改

#include <QtGlobal>
#include <QVector>
#include "plant.h"

class Garden {
public:
    Garden(quint16 gardenSize);
private:
    quint16 gardenSize;
    QVector<QVector<Plant*>> plantarray;
};

实现文件(garden.cpp)修改

#include "garden.h"
Garden::Garden(quint16 gardenSize) : gardenSize(gardenSize) {
    // 初始化二维数组,所有元素默认置为nullptr
    plantarray.resize(gardenSize);
    for (quint16 i = 0; i < gardenSize; i++) {
        plantarray[i].resize(gardenSize);
        // QVector初始化指针类型元素默认就是nullptr,不需要额外赋值
    }
}

调用方式和你预期完全一致:

if (plantarray[x][y] == nullptr) {
    // 你的逻辑
}

方案2:原生指针实现(符合C++标准,手动管理内存)

如果你坚持用原生指针实现,需要正确声明二维指针类型,同时手动实现析构函数释放内存,避免泄漏。

头文件(garden.h)修改

#include <QtGlobal>
#include "plant.h"

class Garden {
public:
    Garden(quint16 gardenSize);
    ~Garden();
    // 禁用拷贝构造和拷贝赋值,避免浅拷贝导致的双重释放问题
    Garden(const Garden&) = delete;
    Garden& operator=(const Garden&) = delete;
private:
    quint16 gardenSize;
    Plant*** plantarray;
};

实现文件(garden.cpp)修改

#include "garden.h"
Garden::Garden(quint16 gardenSize) : gardenSize(gardenSize) {
    // 先申请行数组
    plantarray = new Plant**[gardenSize];
    for (quint16 i = 0; i < gardenSize; i++) {
        // 申请每一行的列数组
        plantarray[i] = new Plant*[gardenSize];
        // 初始化所有元素为nullptr
        for (quint16 j = 0; j < gardenSize; j++) {
            plantarray[i][j] = nullptr;
        }
    }
}

Garden::~Garden() {
    // 释放每一行的列数组
    for (quint16 i = 0; i < gardenSize; i++) {
        delete[] plantarray[i];
    }
    // 释放行数组
    delete[] plantarray;
}

调用方式和你预期完全一致:

if (plantarray[x][y] == nullptr) {
    // 你的逻辑
}

内容的提问来源于stack exchange,提问作者Makozer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:06:02