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

C++中void函数调用二维数组报“数组不能包含该类型元素”错误求助

问题分析与解决方案

错误原因

  1. 二维数组函数参数声明非法:C++中传递二维数组作为函数参数时,必须明确指定除第一维外的所有维度大小。int mat[][]的写法会让编译器无法计算数组元素的内存偏移,因此触发“an array may not have elements of this type”错误。
  2. 未声明变量:main函数中的dim变量缺少类型声明,编译时会出现未定义标识符错误。

修正方案(贴合原代码的静态数组实现)

将create和print函数的二维数组参数改为int mat[][100](对应main中定义的mat[100][100]),同时补全main中dim的类型声明:

#include <iostream>
#include <fstream>
#include <cmath>

void read(int& dim, int vect[])
{
    std::ifstream fin("fisier.in");
    fin >> dim;
    for (int i = 0; i < dim; i++)
    {
        fin >> vect[i];
    }
}

// 修改二维数组参数为int mat[][100]
void create(int Va[], int Ca[], int La[], int dimV, int dimC, int dimL, int mat[][100])
{
    int k = 0;
    for (int i = 0; i < dimL; i++)
        for (int j = 0; j < dimC; j++)
        {
            mat[La[i]][Ca[j]] = Va[k];
            k++;
        }
}

// 修改二维数组参数为int mat[][100]
void print(int dim, int mat[][100])
{
    std::ofstream fout("fisier.out");
    for (int i = 0; i < dim; i++)
    {
        for (int j = 0; j < dim; j++)
            fout << mat[i][j] << " ";
        fout << "\n";
    }
}

int main()
{
    int Va[10001], Ca[100], La[100], dimV, dimC, dimL, mat[100][100] = { 0 };
    read(dimV, Va);
    read(dimC, Ca);
    read(dimL, La);
    // 补全dim的int类型声明
    int dim = sqrt(dimV);
    create(Va, Ca, La, dimV, dimC, dimL, mat);
    print(dim, mat);
}

更灵活的动态数组方案(推荐)

如果不想固定二维数组的大小,推荐使用C++标准库的std::vector实现动态数组,安全且易于维护:

#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>

void read(int& dim, std::vector<int>& vect)
{
    std::ifstream fin("fisier.in");
    fin >> dim;
    vect.resize(dim);
    for (int i = 0; i < dim; i++)
    {
        fin >> vect[i];
    }
}

void create(const std::vector<int>& Va, const std::vector<int>& Ca, const std::vector<int>& La, std::vector<std::vector<int>>& mat)
{
    int k = 0;
    for (int i = 0; i < La.size(); i++)
        for (int j = 0; j < Ca.size(); j++)
        {
            mat[La[i]][Ca[j]] = Va[k];
            k++;
        }
}

void print(int dim, const std::vector<std::vector<int>>& mat)
{
    std::ofstream fout("fisier.out");
    for (int i = 0; i < dim; i++)
    {
        for (int j = 0; j < dim; j++)
            fout << mat[i][j] << " ";
        fout << "\n";
    }
}

int main()
{
    std::vector<int> Va, Ca, La;
    int dimV, dimC, dimL;
    read(dimV, Va);
    read(dimC, Ca);
    read(dimL, La);
    int dim = sqrt(dimV);
    // 初始化dim×dim的二维vector,所有元素为0
    std::vector<std::vector<int>> mat(dim, std::vector<int>(dim, 0));
    create(Va, Ca, La, mat);
    print(dim, mat);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:15:40