我在Windowns 7上使用Microsoft Visual Studio 2010.由于一些不可理解的原因,当我尝试编译以下代码时,我不断收到C2275错误:
#include <stdio.h>
#include <stdlib.h>
typedef struct list_node
{
int x;
struct list_node *next;
}node;
node* uniq(int *a, unsigned alen)
{
if (alen == 0)
return NULL;
node *start = (node*)malloc(sizeof(node)); //this is where i keep getting the error
if (start == NULL)
exit(EXIT_FAILURE);
start->x = a[0];
start->next = NULL;
for (int i = 1 ; i < alen ; ++i)
{
node *n = start;
for (;; n = n->next)
{
if (a[i] == n->x) break;
if (n->next == NULL)
{
n->next = (node*)malloc(sizeof(node));
n = n->next;
if (n == NULL)
exit(EXIT_FAILURE);
n->x = a[i];
n->next = NULL;
break;
}
}
}
return start;
}
int main(void)
{
int a[] = {1, 2, 1, 4, 5, 2, 15, 1, 3, 4};
/*code for printing unique entries from the above array*/
for (node *n = uniq(a, 10) ; n != NULL ; n = n->next)
printf("%d ", n->x); puts("");
return 0;
}
我不断收到此错误“C2275:'node':非法使用此类型作为表达式”当我编译时。但是,我让我的一个朋友在他的IDE中粘贴了相同的代码,它在他的系统上编译!!
我想理解为什么编译器的行为在不同的系统上是不同的,以及影响这种行为差异的原因。
答案 0 :(得分:3)
您不能在其他代码语句之后声明变量node * start
。所有声明都必须在块的开头。
所以你的代码应该是:
node * start;
if (alen == 0)
return;
start = malloc(sizeof(*start));
答案 1 :(得分:0)
我不知道为什么你有**node
。
您只需要node *start
;