【发布时间】:2014-09-07 07:07:51
【问题描述】:
感谢您花时间阅读我的问题, 我看过一些类似的问题,在这种情况下它们似乎没有帮助 虽然可以帮助其他有类似问题的人:
C: Incompatible types?
Struct as incompatible pointer type in C
Incompatible Types Error with Struct C
我正在尝试在 c (-std=c99) 中创建一个简单的链表结构, 在这一点上,我的结构相当通用:
typedef struct
{
int count;
char* word;
struct node *nextNode;
}node;
然后在函数中我有一个“根”或“头”节点:
node *root;
root = (node *) malloc(sizeof(node));
我稍后在函数中尝试将node 分配给根节点nextNode,如下所示:
if(root->nextNode == 0)
{
root->nextNode = foo;
}
这会导致错误:
“从类型 node 分配给类型 struct node* 时出现错误不兼容类型&foo 不会改善这种情况,而是导致 lvalue required as unary 样式错误。
这是围绕我的问题的背景:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
typedef struct
{
int count;
char* word;
struct node *nextNode;
}node;
node makenode(char *word)
{
node x;
x.word = word;
x.count = 1;
return x;
}
void processInput(int threshold, const char* filename)
{
node *root;
root = (node *) malloc(sizeof(node));
root->nextNode = 0;
char* word;
while(fgets(word, 29, stdin) != NULL){
if(root->nextNode == 0)
{
root->nextNode = makenode(word);
}
【问题讨论】:
-
错误信息似乎很清楚。 x*(“指向 x 的指针”)和 x 是不同的类型。
-
你当然是正确的,但是我不确定如何解决这个问题,尽管它看起来很简单。
-
变量 'foo' 是如何定义的。 root->nextNode 的类型是指向定义的“结构节点”的指针。什么是 foo 类型? foo 是否定义为“node *foo”?您应该显示包含 foo 定义的代码部分。
-
节点富; foo.word = word_val; foo.count = 1;
-
您不能将
node分配给node *。发布更多与foo的构造相关的代码(直接在问题中,而不是在 cmets 中)。您几乎肯定需要动态构造foo(通过malloc)才能使其工作。
标签: c pointers struct incompatibletypeerror