Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用结构本身的类型定义结构参数_C++_C_Pointers_Struct_Forward Declaration - Fatal编程技术网

C++ 使用结构本身的类型定义结构参数

C++ 使用结构本身的类型定义结构参数,c++,c,pointers,struct,forward-declaration,C++,C,Pointers,Struct,Forward Declaration,我试图在矩阵中启动BFS算法,以获得从我的位置到BFS找到的第一个可访问元素的最短路径。矩阵由定义如下的节点组成: 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; }; 我需要有一

我试图在矩阵中启动BFS算法,以获得从我的位置到BFS找到的第一个可访问元素的最短路径。矩阵由定义如下的节点组成:

    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;
 };
我需要有一个父节点的实例(以前访问过的实例,并且与实际节点的初始节点之间的距离较小),以便在找到所需的项目后跟踪到原始节点的最快路径。但似乎节点是父节点;声明抛出一个错误,所以可以用struct本身的类型声明struct的元素?还是必须将其声明为指向元素的指针

这里有一些错误:

error: field has incomplete type 'node' 
       node parent;
            ^
note: definition of 'node' is not complete until the closing '} 
      struct node {
             ^

谢谢。

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

C++(和C)具有值语义。也许您使用的是另一种语言的心智模型,在这种模型中,
parent
表示对存储在别处的对象的引用

但在C++中,<代码>节点父节点;<代码>指一个名为

父对象
的对象,该对象完全存储在外部对象内。因此,您的代码将导致对象的无限“深度”

根据您的描述,您可能是指实际存储在其他位置的另一个节点。在C语言中,您可以编写
node*parent,然后要非常小心。在C++中,你有一些选项,包括<代码>懦弱的PTR父;代码>

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

可以用结构本身的类型声明结构的元素吗

没有

你不能用事物本身来定义它

如果汽车上总是有自己的精确副本呢?这样行吗?不它不合适


它有多大?这辆车的大小是它的轮子、座位、方向盘和,呃,另一辆车的大小之和。。。它的轮子,座位,方向盘还有,呃,另一辆车。。。嗯…

您需要使用指针。节点不能包含另一个节点对象,因为该节点本身将包含另一个节点,该节点本身将包含另一个节点,该节点本身将包含另一个节点,该节点本身将包含另一个节点,该节点本身将包含另一个节点,该节点本身将包含另一个节点,它自身包含另一个节点,它自身包含另一个节点,它自身包含另一个节点,它自身包含另一个节点,它自身包含另一个节点,以此类推。如果你能做到这一点——让一个结构包含它自己——想想你如何计算这样一个结构的大小,以及这意味着什么……选择一种语言。