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

C++中传递布尔一维数组指针时出现类型不兼容错误的问题求助

C++中传递布尔一维数组指针时出现类型不兼容错误的问题求助

我来帮你拆解这个问题的核心原因,再一步步告诉你怎么搞定它~

首先,你碰到的编译器错误argument of type "bool **" is incompatible with parameter of type "bool *",本质是你对c_set和o_set的声明完全搞错了类型:

你现在写的bool* c_set[size];,它的真实含义是「一个包含size个bool*指针的数组」(也就是指针数组),类型是bool*[size],当传递给函数时会自动退化为bool**;但你的is_connected函数参数要求的是bool*(指向一维bool数组的指针),这就直接导致了类型不兼容,编译器自然会报错。

另外你误以为能正常运行的测试程序,其实也藏着大问题:测试里的bool* a[size];同样是指针数组,而且你完全没给这些指针分配内存,直接在set函数里写a[i] = true;本质是给野指针赋值,属于未定义行为,只是刚好没崩溃而已,逻辑完全不对。


解决核心问题:修正c_set和o_set的类型

你真正需要的是一维bool数组,用来记录每个节点是否属于闭合/开放集合。根据你的代码风格,有两种靠谱的修正方案:

方案1:用栈上的一维数组(适合编译期固定size的场景)

因为你的size是const int,C++11及以后支持这种常量长度的栈数组,直接把声明改成这样:

int main(){
    const int size = 7;
    // 直接声明为一维bool数组,不用搞指针
    bool c_set[size];
    bool o_set[size];
    // ... 其他代码保持不变
}

这时候你把c_set和o_set传给is_connected时,数组会自动退化为bool*类型,和函数参数的要求完全匹配,编译器报错直接消失。

方案2:用动态分配的一维数组(更灵活,支持运行期size)

如果你以后需要让size变成运行时决定的变量,推荐用动态分配:

int main(){
    const int size = 7;
    // 动态分配size个bool的一维数组,返回的就是bool*类型
    bool* c_set = new bool[size];
    bool* o_set = new bool[size];
    // ... 其他代码
    
    // 记得程序结束前释放内存,避免内存泄漏
    delete[] c_set;
    delete[] o_set;
    // 别忘了也要释放graph的内存
    for(int i=0; i<size; i++){
        delete[] graph[i];
    }
    delete[] graph;
    return 0;
}

这种方式下c_set本身就是bool*类型,和is_connected的参数完美匹配,同样能解决类型错误。


额外的两个小坑(提前帮你避开)

  1. prob函数的随机数逻辑错了
    你现在的prob返回的是int类型的0或1,所以prob() < 0.19的概率其实是50%(只有返回0时成立),完全达不到你想要的19%概率生成边。改成生成0.0到1.0的浮点数才对:
double prob(){
    // 把生成器和分布声明为static,避免每次调用都重新初始化,保证随机性
    static std::random_device rand_dev;
    static std::mt19937 generator(rand_dev());
    static std::uniform_real_distribution<double> distr(0.0, 1.0);
    return distr(generator);
}
  1. is_connected的逻辑有明显问题
    你当前的连通性检测逻辑会提前错误返回false,建议用标准的BFS或DFS实现:
    比如BFS的核心逻辑是:
  • 初始化队列(开放集合),把起始节点加入
  • 标记起始节点已访问
  • 循环取出队列中的节点,遍历所有邻接节点,未访问的就加入队列并标记
  • 最后检查所有节点是否都被访问过

先把c_set和o_set的类型问题搞定,解决编译器报错,再调整随机数和连通性检测的逻辑,你的程序就能正常跑起来啦~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 10:54:31