ошибка после компиляции в C - PullRequest
2 голосов
/ 27 января 2011

Когда я компилирую, я получаю следующую ошибку, почему я получаю эту ошибку, все выглядит нормально. Имеется только часть кода.

ошибка: подписанное значение не является ни массивом, ни указателем

main()
{
int clf_cnt,key;
struct classifier clsf,*clsf_ptr;
int choice;
printf("Creation of B tree for node %d\n",M);
while(1)
{
    printf("1.Insert\n");
    printf("2.Display\n");
    printf("3.Quit\n");
    printf("Enter your choice : ");
    scanf("%d",&choice);
    switch(choice)
            {

                    case 1:
                            printf("Enter the rules : ");
                            for(clf_cnt = 0;clf_cnt < M;clf_cnt++)
                                    {
                             error line:       clsf_ptr = &clsf[clf_cnt];

но я объявил

    struct node
    {
    int n; 
    int keys[M-1]; 
    struct node *p[M]; 
    struct classifier clsf[M-1]; 
    }*root=NULL;

тогда как вставить данные в этот массив структуры

Ответы [ 5 ]

2 голосов
/ 27 января 2011

Вы пытаетесь проиндексировать struct здесь: clsf[clf_cnt].Структуры не могут быть проиндексированы таким образом, только массивы и указатели.

Таким образом, написание, например, clsf_ptr[clf_cnt] вместо этого сделает ваш компилятор счастливым :-) Однако затем вы должны также инициализировать этот указатель, чтобы фактически указывать на существующиймассив struct classifier экземпляров, до его использования.В противном случае вы получите неопределенное поведение (т.е., скорее всего, ваша программа потерпит крах).

1 голос
/ 27 января 2011

clsf объявлен как один struct, но вы воспринимаете его как массив.

1 голос
/ 27 января 2011

Поскольку clsf имеет тип struct classifier, который не является массивом или указателем, именно то, что сказал вам компилятор. Вы не можете использовать оператор [] на struct в C.

1 голос
/ 27 января 2011

Проблема с clsf[clf_cnt]. clsf не является ни указателем, ни массивом.

0 голосов
/ 27 января 2011

Я думаю, что оскорбительная строка должна быть clsf_ptr[clf_cnt];.

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