我正在尝试将BFS算法发送到Matrix中,以获得从我的位置到BFS找到的第一个可访问元素的最短路径 . Matrix由定义如下的节点组成:
struct node {
int distance = -1;
node parent;
Pos position;
//Direction to get into the actual node from the parent's position.
Dir direction;
Cell cell;
};
我需要有一个父节点的实例(先前访问过的一个实例,与实际节点的初始节点的距离较小),一旦找到所需的项目,就会追溯到原始节点的最快路径 . 但它似乎是节点父节点;声明抛出错误,因此可以使用结构本身的类型声明结构的元素吗?或者我是否必须将其声明为指向元素的指针?
这里有错误:
error: field has incomplete type 'node'
node parent;
^
note: definition of 'node' is not complete until the closing '}
struct node {
^
谢谢 .
2 回答
没有 .
你不能用自己来定义某些东西 .
如果汽车总是包含自己的精确副本怎么办?那会有用吗?没有!这不合适 .
它会有多大?汽车的大小将是它的轮子,座椅,方向盘和呃,另一辆汽车的大小的总和......它的轮子,座椅,方向盘和呃,另一辆车......嗯......
这是不可能的 . 结构不能包含自身的实例 .
C(和C)具有值语义 . 也许您正在使用不同语言的心智模型,其中
parent
表示对存储在其他地方的对象的引用 .但是在C中,
node parent;
表示一个名为parent
的对象,它完全存储在外部对象中 . 因此,您的代码将导致无限'depth'个对象 .根据您的描述,您可能意味着引用另一个实际存储在其他地方的节点 . 在C中你会写
node *parent;
,然后要非常小心 . 在C中你有几个选项,包括weak_ptr<node> parent;
.在两种语言的情况下,非侵入式容器是另一种选择(即您的节点不包含任何节点引用;并且您有另一个结构,其中包含有关节点链接的所有信息) .