【问题标题】:error: request for member ‘-----’ in something not a structure or union错误:在不是结构或联合的情况下请求成员“-----”
【发布时间】:2014-11-07 01:58:36
【问题描述】:

使用 gcc 编译时出现这两条错误消息

error: request for member ‘name’ in something not a structure or union
    else if(strcmp((*node).name, (*root).name) < 0)



error: incompatible types when assigning to type ‘char[101]’ from type ‘char *’
    (*node).name = SomeString;

根据我的发现,当您尝试调用这样的节点时,通常会发生第一个错误

node.name;

而不是

(*node).name;

因为这里不是这种情况,我想知道是什么导致了错误以及如何修复它?

节点定义为:

struct person {
    char name[42];
    struct person *left, *right;
} root;

创建
struct person *node;
node = (struct person *) calloc(1, sizeof(struct person));
(*node).name = SomeString;

【问题讨论】:

  • 请注意,使用 node->name 代替 (*node).name 更为典型
  • root 不是指针。它是一个对象。使用root.name 而不是(*root).name
  • @RSahu 你怎么知道root 不是指针?
  • @Daniel,发布的代码将root 定义为一个对象。
  • 请发布一个最小的完整示例,而不是 sn-ps

标签: c nodes


【解决方案1】:

数组没有赋值运算符。当您要将字符串分配给字符数组时,您必须使用在标题 &lt;string.h&gt; 中声明的标准函数 strcpy 用于字符数组

#include <string.h>

//...

strcpy( (*node).name, SomeString; );

至于第一个错误,那么root 不是指针。你必须写

else if(strcmp((*node).name, root.name) < 0)

而不是

else if(strcmp((*node).name, (*root).name) < 0)

我认为将root定义为更正确

struct person {
    char name[42];
    struct person *left, *right;
} *root = NULL;

【讨论】:

  • @user2856110 查看我更新的帖子。一开始我不明白你没有更新的第一个错误。
【解决方案2】:

尝试使用

node->name

由于节点是一个指针,你必须访问结构成员,如上所示。

还应使用 strcpy() 为您的结构成员赋值。

strcpy(node->name,"hello");

struct person *root;

将解决您的第一个错误

【讨论】:

  • 之前尝试过,结果相同。 ( (*node).name 和 node->name 据我了解是相同的,只是一个口味问题)
  • 是的 (*node).name 也可以使用,但不是 node.name 如您的代码所示
  • @user2856110 这不是品味问题。功能上 (*node).name 和 node->name 做同样的事情,但一般来说,C 程序员更喜欢 -> 表示法,因为它更容易阅读。
  • @Daniel 在问的问题中 OP 使用 node.name 所以我说这是错误的
【解决方案3】:

当我们使用指针变量访问结构成员时,使用'->'(箭头操作符)来访问结构成员更可取且最适合使用它。
所以而不是 (*node).name 我们可以用 node-&gt;name

有关 C 中字符串的更多信息,您可以访问此 wiki 链接,这将非常有帮助:

http://en.wikipedia.org/wiki/C_string_handling

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多