我在文件s.h中定义了一个结构
struct Scommand {
int a;
struct Scommand next;
}
在我的main.c中我包含s.h并拥有此代码
struct Scommand *commandList=0;
struct SCommand *thisCommand;
thisCommand = commandList;
由于某种原因,我总是在最后一行得到错误“Assignment form incompatible pointer types”。有人可以解释原因吗?这看起来很简单
答案 0 :(得分:1)
这里有2个不相关的问题:
初始结构的定义应如下所示:
struct Scommand {
int a;
struct Scommand *next;
}
如果没有它,你试图将整个结构插入其自身。这使得类型定义递归,这是不允许的。
第二点。 C和C ++有一个前向声明的概念:
struct Scmd *someCommand;
这可能会令人惊讶,但这一行有两件事:
Scmd
结构创建前向声明。someCommand
。尽管这条线看起来像变量的定义,但实际上这里有2个定义。现在返回到您的代码:
struct Scommand *commandList=0;
struct SCommand *thisCommand;
thisCommand = commandList;
结构的名称不同,因为C中的所有名称都区分大小写。第一个已经定义。第二个SCommand
已定义。这是独立的结构,与您的原始结构无关。这就是错误的原因。我同意在这种特殊情况下,错误不是很自我解释。但是,它可能会出现在其他可能听起来更合适的情况下。