首页 文章

使用struct本身的类型定义struct参数

提问于
浏览
1

我正在尝试将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 回答

  • 0

    可以使用struct本身的类型声明struct的元素吗?

    没有 .

    你不能用自己来定义某些东西 .

    如果汽车总是包含自己的精确副本怎么办?那会有用吗?没有!这不合适 .

    它会有多大?汽车的大小将是它的轮子,座椅,方向盘和呃,另一辆汽车的大小的总和......它的轮子,座椅,方向盘和呃,另一辆车......嗯......

  • 1

    这是不可能的 . 结构不能包含自身的实例 .

    C(和C)具有值语义 . 也许您正在使用不同语言的心智模型,其中 parent 表示对存储在其他地方的对象的引用 .

    但是在C中, node parent; 表示一个名为 parent 的对象,它完全存储在外部对象中 . 因此,您的代码将导致无限'depth'个对象 .

    根据您的描述,您可能意味着引用另一个实际存储在其他地方的节点 . 在C中你会写 node *parent; ,然后要非常小心 . 在C中你有几个选项,包括 weak_ptr<node> parent; .

    在两种语言的情况下,非侵入式容器是另一种选择(即您的节点不包含任何节点引用;并且您有另一个结构,其中包含有关节点链接的所有信息) .

相关问题