错误:请求成员'-----',而不是结构或联合

时间:2014-11-06 17:14:17

标签: c nodes

使用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;

3 个答案:

答案 0 :(得分:1)

数组没有赋值运算符。如果要将字符串分配给字符数组,则必须在标题strcpy中为字符数组使用标准函数<string.h>

#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;

答案 1 :(得分:0)

尝试使用

node->name

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

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

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

struct person *root;

将解决您的第一个错误

答案 2 :(得分:0)

更优选且大多适合使用' - &gt;' (箭头操作符)在我们使用指针变量访问它时访问结构成员 而不是 (*node).name 我们可以用 node->name

有关C语言中字符串的更多信息,您可以访问此Wiki链接,这将非常有用:

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