使用结构本身的类型定义结构参数
Defining a struct parameter with the type of the struct itself
我正在尝试将 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;
};
我需要有一个父节点的实例(之前访问过的那个,并且与实际节点的初始节点的距离更短),以便在找到所需的项目后追踪最快的路径回到原始节点。但是似乎 node parent; 声明会抛出一个错误,所以可以用结构本身的类型声明结构的元素吗?还是我必须将其声明为指向元素的指针?
这里有错误:
error: field has incomplete type 'node'
node parent;
^
note: definition of 'node' is not complete until the closing '}
struct node {
^
谢谢。
这是不可能的。结构不能包含其自身的实例。
C++(和 C)具有值语义。也许您正在使用另一种语言的心智模型,其中 parent
表示对存储在别处的对象的引用。
但在 C++ 中,node parent;
表示一个名为 parent
的对象,它完全存储在外部对象中。所以你的代码会导致无限 'depth' 个对象。
根据您的描述,您的意思可能是引用另一个实际存储在别处的节点。在 C 中你会写 node *parent;
,然后要非常小心。在 C++ 中,您有几个选项,包括 weak_ptr<node> parent;
。
在这两种语言的情况下,非侵入式容器是另一种选择(即您的节点不包含任何节点引用;并且您有另一个结构来保存有关节点链接的所有信息)。
it is possible to declare an element of the struct with the type of the struct itself?
没有
你不能根据自身来定义某物。
如果汽车总是包含其自身的精确副本怎么办?那行得通吗?不!不合适。
有多大?汽车的尺寸将是它的车轮、座椅、方向盘和呃,另一辆车的尺寸的总和……还有它的车轮、座椅、方向盘和,呃,另一辆车……嗯……
我正在尝试将 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;
};
我需要有一个父节点的实例(之前访问过的那个,并且与实际节点的初始节点的距离更短),以便在找到所需的项目后追踪最快的路径回到原始节点。但是似乎 node parent; 声明会抛出一个错误,所以可以用结构本身的类型声明结构的元素吗?还是我必须将其声明为指向元素的指针?
这里有错误:
error: field has incomplete type 'node'
node parent;
^
note: definition of 'node' is not complete until the closing '}
struct node {
^
谢谢。
这是不可能的。结构不能包含其自身的实例。
C++(和 C)具有值语义。也许您正在使用另一种语言的心智模型,其中 parent
表示对存储在别处的对象的引用。
但在 C++ 中,node parent;
表示一个名为 parent
的对象,它完全存储在外部对象中。所以你的代码会导致无限 'depth' 个对象。
根据您的描述,您的意思可能是引用另一个实际存储在别处的节点。在 C 中你会写 node *parent;
,然后要非常小心。在 C++ 中,您有几个选项,包括 weak_ptr<node> parent;
。
在这两种语言的情况下,非侵入式容器是另一种选择(即您的节点不包含任何节点引用;并且您有另一个结构来保存有关节点链接的所有信息)。
it is possible to declare an element of the struct with the type of the struct itself?
没有
你不能根据自身来定义某物。
如果汽车总是包含其自身的精确副本怎么办?那行得通吗?不!不合适。
有多大?汽车的尺寸将是它的车轮、座椅、方向盘和呃,另一辆车的尺寸的总和……还有它的车轮、座椅、方向盘和,呃,另一辆车……嗯……