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

如何向类构造函数传递数组并存储?解决数组边界未指定错误

解决数组传递给类构造函数并存储的问题

你遇到的invalid use of array with unspecified bounds错误,核心原因有两个:

  1. C++不允许直接对数组进行赋值操作,函数参数里的byte matrix[]会被编译器自动退化为byte*指针,但类成员byte _matrix[]属于不完整类型,无法直接用来存储数组。
  2. 直接赋值数组的操作在C++里本身就是不允许的。

下面给你三种可行的解决方法:

方法一:用指针存储(需注意数组生命周期)

把类成员改成指针,同时额外存储数组长度避免越界访问。这种方式只是存储原数组的指针,所以原数组不能提前被销毁,否则会出现悬空指针问题。

byte matrix[] = { HIGH, LOW, HIGH };
const int MATRIX_SIZE = sizeof(matrix)/sizeof(matrix[0]); // 计算数组长度

sources[0] = new Source("test", matrix, MATRIX_SIZE);

class Source
{
public:
    Source();
    Source(String id, byte* matrix, int size);

private:
    String _id;
    byte* _matrix;
    int _size; // 记录数组长度,防止越界
};

Source::Source() : _matrix(nullptr), _size(0) {}

Source::Source(String id, byte* matrix, int size)
{
  _id = id;
  _matrix = matrix;
  _size = size;
}

方法二:用std::array(固定大小数组场景)

如果你的数组大小是固定的,用std::array是最安全的选择,它支持直接赋值,会完整复制数组内容,不用担心生命周期问题:

#include <array>

std::array<byte, 3> matrix = { HIGH, LOW, HIGH };

sources[0] = new Source("test", matrix);

class Source
{
public:
    Source();
    Source(String id, const std::array<byte, 3>& matrix);

private:
    String _id;
    std::array<byte, 3> _matrix;
};

Source::Source() {}

Source::Source(String id, const std::array<byte, 3>& matrix)
{
  _id = id;
  _matrix = matrix; // 直接赋值std::array对象
}

方法三:用std::vector(动态大小数组场景)

如果数组大小不确定或者需要动态调整,std::vector是最佳方案,它会自动管理内存,支持灵活的扩容和赋值:

#include <vector>

byte matrix[] = { HIGH, LOW, HIGH };
// 将普通数组转为vector
std::vector<byte> vec_matrix(matrix, matrix + sizeof(matrix)/sizeof(matrix[0]));

sources[0] = new Source("test", vec_matrix);

class Source
{
public:
    Source();
    Source(String id, const std::vector<byte>& matrix);

private:
    String _id;
    std::vector<byte> _matrix;
};

Source::Source() {}

Source::Source(String id, const std::vector<byte>& matrix)
{
  _id = id;
  _matrix = matrix; // 直接赋值vector
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 15:22:48