所以我有这段代码:
typedef struct node link;
struct node {int v; link *next;};
struct graph{int V; int E; link **adj;};
在第一行中,我收到错误“将链接重新定义为不同类型的符号”。
在第二行和第三行,我得到“Unkown type name”链接“”。
有什么想法吗?
编辑:我将名称链接更改为其他内容并且它可以正常工作,但我的项目中没有其他任何名为link的链接。
答案 0 :(得分:5)
如果您使用的是POSIX平台(如Linux或OSX),则会有一个名为link
的系统函数。
结构名称与struct node
一样,位于一个单独的名称空间中(这就是为什么你可以做typedef struct node node;
),但是类型别名与其他所有名称空间存在于同一个名称空间中这意味着如果你有一个函数link
,你就不能拥有同名的类型别名。
答案 1 :(得分:0)
约阿希姆已经给出了答案。真正的提示在编译器警告中:重新定义链接为不同类型的符号。您正在定义一个新类型,但链接已被定义为其他类型。这个定义失败了。 因此,在第2行和第3行中使用类型时,会出现未知类型名称错误。