2015-04-01 2 views
3

Я пытаюсь прочитать значения из файла в массив структур. Тем не менее, я продолжаю получать ошибки компилятора, которые говорят мне, что моя структура «Книги» не предоставляет оператора индексирования, и я теряюсь.Тип структуры «не предоставляет индексный оператор»

Структура содержится в файле заголовка, в то время как объявление массива структур находится в main(). Здесь (необходимо) код из файла заголовка functions.h:

#ifndef FUNCTIONS_H 
#define FUNCTIONS_H 
#include <iostream> 
#include <string> 
#include <fstream> 
using namespace std; 

struct Books 
{ 
     int ISBN; 
     string Author; 
     string Publisher; 
     int Quantity; 
     double Price; 
}; 


class functions 
{ 
     public: 
       void READ_INVENTORY(Books, int, int); 

}; 


// Function definitions 

void READ_INVENTORY(Books array, int max, int position) 
{ 
     ifstream inputFile; 
     inputFile.open("inventory.dat"); 

     inputFile >> array[position].ISBN; 
     inputFile >> array[position].Author; 
     inputFile >> array[position].Publisher; 
     inputFile >> array[position].Quantity; 
     inputFile >> array[position].Price; 

     cout << "The following data was read from inventory.dat:\n\n" 
      << "ISBN: " << array[position].ISBN << endl 
      << "Author: " << array[position].Author << endl 
      << "Publisher: " << array[position].Publisher << endl 
      << "Quantity: " << array[position].Quantity << endl 
      << "Price: " << array[position].Price << endl << endl; 
} 

А вот массив декларации структуры в основной наряду с тем, как оно используется:

#include <iostream> 
#include <string> 
#include <fstream> 
#include "functions.h" 
using namespace std; 

int main() 
{ 
     const int MAX_SIZE = 100; 
     int size, choice; 
     functions bookstore; 
     Books booklist[MAX_SIZE]; 

     cout << "Select a choice\n\n"; 

      cin >> choice; 

      size = choice; 

      switch (choice) 
      { 
        case 1: bookstore.READ_INVENTORY(booklist[choice], MAX_SIZE, size); 
          break; 

      } 
} 

После компиляции, я получить 10 сообщений об ошибках (по одному на каждый раз, когда я использую массив [положение]), что состояние: ошибки: типа «Книга» не предоставляет оператору индекс

+0

'Books array' не является массивом. Вы должны передать массив 'Books *. В настоящее время вы просто проходите одну книгу, и, очевидно, нет []. BTW, вы должны улучшить имя переменной, массив не очень описателен; как насчет «книг»? – usr1234567

+0

'array' - это не массив ... – immibis

ответ

2

есть слишком много проблем в вашем коде, вы определяете READ_INVENTORY как зло функция bal. Таким образом, вы могли получить, что существует неопределенная ссылка на functions::READ_INVENTORY. Другая проблема заключается в том, что вы пропускаете Books вместо Books*, поэтому вы не можете использовать оператор [].

Изменить этот

void READ_INVENTORY(Books array, int max, int position) 
{ 

в

void functions::READ_INVENTORY(Books* array, int max, int position) 
{ 

Теперь, когда мы изменили параметр типа, измените эту строку

case 1: bookstore.READ_INVENTORY(booklist[choice], MAX_SIZE, size); 

в

case 1: bookstore.READ_INVENTORY(booklist, MAX_SIZE, size);