来自头文件中struct的不兼容指针类型的赋值

时间:2016-01-25 02:17:06

标签: c pointers struct

我在文件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”。有人可以解释原因吗?这看起来很简单

1 个答案:

答案 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已定义。这是独立的结构,与您的原始结构无关。这就是错误的原因。我同意在这种特殊情况下,错误不是很自我解释。但是,它可能会出现在其他可能听起来更合适的情况下。

相关问题