base operand of ‘->’ is not a pointer

109
29 ноября 2020, 16:40

Главное в этой функции всё нормально компилируется.

terminal::terminal ( )
{
        index = 0;
        for ( int i = 0; i < MAX_INODES; i++ ) {
                file[i] = (inode *) calloc ( 1, sizeof ( inode ) );
                file[i]->data = (char *) calloc ( i == 0 ? 4 : 0, sizeof ( char ) );
                file[i]->size_data = i == 0 ? 4 : 0;
        }
        index = 0;
        file[index]->inode = 0;
        strncpy ( file[index]->name, "/\0", 2 );
        file[index]->type = M_DIR;
        file[index]->busy = BUSY;
        current_inode = index;

}

А вот в этой уже не работает код, пишет эти ошибки.

terminal.cpp: In member function ‘void terminal::mkdir(char*)’:
terminal.cpp:29:19: error: base operand of ‘->’ is not a pointer
   if ( file[index]->busy == UNBUSY ) break;
                   ^~
terminal.cpp:36:32: error: base operand of ‘->’ is not a pointer
  int size = file[current_inode]->size_data;
                                ^~
terminal.cpp:39:21: error: base operand of ‘->’ is not a pointer
  file[current_inode]->data = (char *) realloc ( file[current_inode]->data ,
                     ^~
terminal.cpp:39:68: error: base operand of ‘->’ is not a pointer
  file[current_inode]->data = (char *) realloc ( file[current_inode]->data ,
                                                                    ^~
terminal.cpp:42:31: error: base operand of ‘->’ is not a pointer
  memcpy ( &file[current_inode]->data[size], index, length );

Хотя структура file никак не поменялась, вот функция.

void terminal::mkdir ( char *file )
{
        int global_offset = current_inode;
        /* найти свободный inode */
        for ( index = 0; index < MAX_INODES; index++ ) {
                if ( file[index]->busy == UNBUSY ) break;
        }
        if ( index == MAX_INODES ) {
                fprintf ( stderr, "нет места.\n" );
                return;
        }
        int size = file[current_inode]->size_data;
        int length = sizeof ( int );
        file[current_inode]->data = (char *) realloc ( file[current_inode]->data ,
                        size + length );
        memcpy ( &file[current_inode]->data[size], index, length );
}

Вот terminal.h

#ifndef H_TERMINAL
#define H_TERMINAL
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define M_DIR 1
#define M_FILE 2
#define MAX_INODES 255
#define BUSY 1
#define UNBUSY 0
struct inode {
    int inode;
    char name[255];
    int type;
    int busy;
    char *data;
    int size_data;
};
typedef struct inode inode;
class terminal {
    public:
        terminal ( );
        void mkdir ( char *file );
    private:
        inode *file[MAX_INODES];
        int index;
        int max;
        int current_inode;
    protected:
};
#endif

Вот main.

#include <stdio.h>
#include <iostream>
#include "terminal.h"
int main ( )
{
    terminal *zex = new terminal ( );
}
READ ALSO
Помогите решить задачу на С++

Помогите решить задачу на С++

Дана последовательность из n словДля каждого элемента определить, сколько раз это слово встречалось в этой последовательности раньше ( на позициях...

105
Не срабатывает слот в Qt

Не срабатывает слот в Qt

У меня есть функция, которая вызывает слот:

117
Qt: как проверить query.value на нуль

Qt: как проверить query.value на нуль

Есть объект класса QSqlQuery queryВ query попадает результат некоторого запроса

109
Неполное высвобождение памяти

Неполное высвобождение памяти

Есть задача - реализовать двусвязный список(хранимые значения - целые числа) при помощи структурПри заполнении списка 10^7 значениями память...

131