C++有向图最短路径程序开发遇C3863错误求助
解决Error C3863: array type 'bool [openNode]' is not assignable
嘿,这个错误我在写最短路径算法(比如Dijkstra)的时候踩过坑,太熟悉了!咱们先拆解下问题:
错误原因
C++里数组类型是不可直接赋值的——你不能把一个数组整体赋值给另一个同类型数组,哪怕它们大小一样。比如你第127行大概率写了类似这样的代码:
bool openNodes[openNode]; bool tempNodes[openNode] = {false}; openNodes = tempNodes; // 这里直接触发C3863错误
或者是尝试用一个表达式直接给数组变量赋值,这在C++里是不允许的,数组类型属于“不可赋值的左值”。
另外提一句:如果openNode是运行时才确定的变量,那bool [openNode]属于变长数组(VLA),这其实是C语言的特性,C++标准并不支持,只是部分编译器(比如GCC)会兼容。用这种数组本身就容易引发兼容性问题,更推荐用标准容器替代。
解决方案
针对你的最短路径场景,有两种靠谱的解决方式:
1. 手动循环逐个赋值
如果坚持用原生数组,就遍历每个索引,把值逐个复制过去:
bool openNodes[openNode]; bool tempNodes[openNode] = {false}; // 逐个赋值替代整体赋值 for (int i = 0; i < openNode; ++i) { openNodes[i] = tempNodes[i]; }
2. 改用std::vector<bool>(更推荐)
用C++标准库的vector容器,它支持直接赋值,还能避免变长数组的兼容性问题:
#include <vector> // 记得包含头文件 // 初始化一个大小为openNode、所有元素为false的vector std::vector<bool> openNodes(openNode, false); std::vector<bool> tempNodes(openNode, false); // 直接赋值,完全合法 openNodes = tempNodes;
而且vector会自动管理内存,不用你操心数组越界或者内存释放的问题,对于动态变化的节点数量也更灵活。
最后检查
去看你项目P的第127行,找到那个数组赋值的语句,替换成上面两种方式之一,应该就能解决这个错误了。
内容的提问来源于stack exchange,提问作者Granzo
相关产品推荐
相关产品推荐

