【问题标题】:What makes this struct incomplete?是什么让这个结构不完整?
【发布时间】:2010-04-23 05:29:48
【问题描述】:

gcc 亲切地向我抛出这个错误:

bst.c:33: error: invalid application of ‘sizeof’ to incomplete type ‘struct BSTNode’

是什么让 BSTnode 不完整?下面是与 BSTnode 相关的结构体定义。

struct BSTnode{

    struct BSTnode * left;
    struct BSTnode * right;

    struct hash minhash;
    struct hash maxhash;

    struct DHTid owner;
    int misses;
};

我们在哪里:

struct hash{
    int hash;
};

struct DHTid
{
    int islocal;

    unsigned long addr;
    unsigned short port;
    struct DHTnode * node;
};

目前:

struct DHTnode{
    int something;
};

编辑:我的实际代码具有以下结构:

struct DHTnode{...};
struct hash{...};
struct DHTid{...}; /*changed . to ; in pseudocode*/
struct BSTnode{...};

编辑:user318466 指出了一个缺少的分号,但还有更多错误。

【问题讨论】:

  • 哈希和 DHTNode 结构定义后需要分号。
  • @Boojum:抱歉,这是一个复制粘贴错误:/。它实际上在我的代码中。
  • 总是粘贴原始的完整程序。如果你不这样做,你会看到这会带来多少不便......
  • 另一件事struct hash 有一个名为int hash; 的变量。编译器为此抛出错误。如果我更正它,则没有错误。和实际代码中的一样吗?
  • @Naveen:在名为hash 的结构中拥有一个名为hash 的字段绝对没有问题。如果你的编译器抱怨它,那一定是你的编译器有问题。

标签: c gcc struct


【解决方案1】:

您声明了类型struct BSTnode。您正在应用 sizeof 输入 struct BSTNode。注意大小写的区别:n 和 N。当然,struct BSTNode 是编译器不完全类型完全不知道的,这就是它告诉你的。

【讨论】:

    【解决方案2】:

    结尾处缺少;:

    struct DHTid{...}.
    

    应该是:

    struct DHTid{...};
    

    【讨论】:

    • 我猜你的意思是DHTnode?不幸的是,它仍然给我同样的错误。 ://
    • 我假设他的意思是 DHTid,你在结构之后留下了一个点,而不是分号。请注意,如果你花时间说“我的代码实际上看起来像这样”,我们会相信你的话,问题和所有。
    • 哦。我没有意识到他没有读完剩下的部分。我的印象是结构在英语中是一个比照片印记更抽象的术语。
    【解决方案3】:

    您的头文件可能#define 您的标识符之一是您不想要的东西。

    【讨论】:

    • 我没有#defines。另外,在有人说我应该粘贴整个代码之前,有三个文件和大约 500 行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 2014-12-29
    相关资源
    最近更新 更多