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

C++中如何将指针对象数组传入构造函数?PCBTable初始化报错

问题原因

你在头文件里定义的PCB* table[]是未指定大小的数组声明,在C++中这类成员属于不完整类型,而且数组变量本身是不可修改的左值,无法直接用=赋值,所以编译器抛出报错。

修复方案

有两种可靠的实现方式:

方式一:改用指针成员管理动态数组

修改头文件的类定义,将table改为指向指针的指针,同时新增成员存储数组大小,方便后续操作:

class PCBTable {
private:
    PCB** table;
    int tableSize;
public:
    PCBTable(int size);
    ~PCBTable(); // 必须添加析构函数释放内存
};

实现构造函数与析构函数:

PCBTable::PCBTable(int size) : tableSize(size) {
    table = new PCB*[size];
    // 可选:初始化每个指针为nullptr,避免野指针
    for (int i = 0; i < size; ++i) {
        table[i] = nullptr;
    }
}

PCBTable::~PCBTable() {
    // 若每个PCB*指向new创建的对象,需先逐个delete释放
    // for (int i = 0; i < tableSize; ++i) {
    //     delete table[i];
    // }
    delete[] table; // 释放指针数组本身
}

方式二:使用标准库容器(更推荐)

直接用std::vector<PCB*>替代手动管理的动态数组,无需手动处理内存:

#include <vector>

class PCBTable {
private:
    std::vector<PCB*> table;
public:
    PCBTable(int size);
};

构造函数实现:

PCBTable::PCBTable(int size) : table(size, nullptr) {
    // vector会自动初始化size个nullptr元素,内存管理由容器自动完成
}

这种方式无需手动编写析构函数,vector会自动释放内存,安全性更高。

关键说明
  • C++不支持类成员中使用未指定大小的数组(即原代码中的PCB* table[]),必须改用指针或标准容器实现动态大小的数组。
  • 数组名是常量指针,无法被赋值,table = new PCB*[size]这类写法本质上不符合C++语法规则。

内容的提问来源于stack exchange,提问作者a true scotsman uth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:05:42