2010-10-28 4 views
0

Hi нужно скопировать записанные объекты в файле, чтобы скопировать в массив Но следующий код дает мне ошибкуC++ Копирование объектов из файла в массив

T Obj 
    T arr[20]; 
    while(file.read((char*)&Obj,sizeof(Obj))){ 
      int i=0; 
      i++ 

      arr[i]==Obj; 
      } 

Ошибка C2678: бинарный «==»: оператор не найден, который принимает левый операнд типа

+2

Ну, во-первых, у вас нет точки с запятой после i ++. – Cam

+1

... и i является локальным, поэтому код всегда будет обращаться к arr [1] – Vlad

ответ

3

Ну, во-первых, оператор == используется для сравнения, а не для присвоения. Для назначения вам нужен один =. Во-вторых, ваш код не переносится и, возможно, не работает, поскольку способ хранения вашего объекта на диске в виде последовательности байтов не обязательно совпадает с тем, как он хранится в памяти как объект T. Это связано с тем, что разные компьютеры/платформы/компиляторы представляют двоичные данные по-разному. Плюс, как упоминает Владелец в комментарии ниже, если экземпляры T содержат внутренние указатели (например, std::string), тогда ваша программа просто развалится.

Вы, вероятно, следует искать в serialization library, или по крайней мере использовать C++ iostreams для сериализации объекта в текстовом формате, а затем использовать istream_iterator читать их с диска.

+1

... и если объект содержит указатели, этот десериализация явно неверна. – Vlad

0

В C++ '==' - это оператор равенства, если вы хотите назначить объект массиву 'arr', вы должны использовать одиночный '='. Также чтение объектов непосредственно из двоичного файла является «сомнительным». Вместо этого вы должны использовать «потоковые операторы» (Google it).

Смежные вопросы