Повторное возникновение ошибки C2275 - PullRequest
3 голосов
/ 21 сентября 2011

Я использую Microsoft Visual Studio 2010 на Windowns 7. По непонятной причине я продолжаю получать ошибку 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: «узел»: недопустимое использование этого типа в качестве выражения «при компиляции.Тем не менее, я попросил одного из моих друзей вставить тот же код в его IDE, который он компилирует в своей системе !!
Я хотел бы понять, почему поведение компилятора отличается в разных системах и что влияет на это различие в поведении.

Ответы [ 2 ]

3 голосов
/ 21 сентября 2011

Вы не можете объявить переменную node * start после других операторов кода.Все объявления должны быть в начале блока.

Поэтому ваш код должен выглядеть так:

node * start;

if (alen == 0) 
    return;

start = malloc(sizeof(*start));
0 голосов
/ 21 сентября 2011

Понятия не имею, почему у вас там **node.

Вам просто нужно node *start;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...