Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2012, 18:05   #1
enzaime
 
Регистрация: 09.05.2012
Сообщений: 6
По умолчанию Программирование в классах. Использование потоковых функций write, read.

Всем привет. У меня проблема с функцией read, точнее не с самой функцией, а реализацией её в классе.
Есть класс flay с полями *name, number, *type, и методы класса (класс разбит на 2 файла flay.h-заголовки методов, flay.cpp - сами методы)
flay.h
Код:
#pragma once
#include <iostream>
#include <fstream>
using namespace std;
class flay
{
private:
	char *name;
	int number;
	char *type;
public:
	flay(char *name1,int number1,char *type1);// конструктор с параметрами
	flay(const flay &a);//конструктор-копировщик
	flay();//конструктор по умолчанию
	int getnum();//получить номер
	friend istream &operator>>(istream &is,flay &b);//перегруженный оператор>>
	friend ifstream &operator>>(ifstream &is,flay &b);//перегруженный оператор>> для файлов
	friend ostream &operator<<(ostream &a,flay &b){a<<b.name<<" "<<b.number<<" "<<b.type<<"\n";return a;}//перегруженный оператор<< 
	friend ofstream &operator<<(ofstream &a,flay &b){a<<b.name<<" "<<b.number<<" "<<b.type<<"\n";return a;}//перегруженный оператор<< для файлов
	void binw(char *fname);//запись в двоичный файл (на вход идёт имя файла)
	flay binr(char *fname,int n);//чтение из двоичного файла (на вход идёт имя файла и номер считываемой записи)
	~flay(void);
};
flay.cpp
Код:
flay::flay(char *name1,int number1,char *type1)
{
	name=new char[strlen(name1)+1];
	strcpy(name,name1);
	number=number1;
	type=new char[strlen(type1)+1];
	strcpy(type,type1);
}
flay::flay(const flay &a)
{
	name=new char[strlen(a.name)+1];
	strcpy(name,a.name);
	number=a.number;
	type=new char[strlen(a.type)+1];
	strcpy(type,a.type);
}

istream &operator>>(istream &is,flay &b)
{
	delete[]b.name;
	delete[]b.type;
	char a[1000];char c[1000];int n;
	is>>a>>n>>c;
	b.number=n;
	b.name=new char[strlen(a)+1];
	b.type=new char[strlen(c)+1];
	strcpy(b.type,c);
	strcpy(b.name,a);
	return is;
}
ifstream &operator>>(ifstream &is,flay &b)
{
	delete[]b.name;
	delete[]b.type;
	char a[1000];char c[1000];int n;
	is>>a>>n>>c;
	b.number=n;
	b.name=new char[strlen(a)+1];
	b.type=new char[strlen(c)+1];
	strcpy(b.type,c);
	strcpy(b.name,a);
	return is;
}
flay::flay(){name=new char[20];type=new char[20];number=0;};
void flay::binw(char *fname)
{
	ofstream in(fname,ios::binary|ios::out|ios::app);
	in.write((char*)this,sizeof(flay));
	in.close();
}
flay flay::binr(char *fname,int n)
{
	ifstream out(fname,ios::binary|ios::in);
	out.seekg(sizeof(flay)*n,ios::beg);
	out.read((char*)this,12);
	out.close(); 
	return *this;
}
int flay::getnum(){int a=this->number;return a;}
flay::~flay(void)
{
	delete[]name;
	delete[]type;
}

Задача вроде простая: запись в двоичный файл и чтение из него. Запись проходит успешно, а вот с чтением проблема: Не считывается из файла.
Вот пример функции main
Код:
#include "stdafx.h"
#include "flay.h"
#include <iostream>
#include "stdlib.h"
#include "string.h"
#include <fstream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	flay a[3];
	flay b[3];
	for(int i=0;i<3;i++) cin>>a[i];
	for(int i=0;i<3;i++)a[i].binw("text3.txt");
	for(int i=0;i<3;i++){b[i].binr("text3.txt",i);cout<<b[i]<<"\n";}

	return 0;
}
Если файл изначально пустой, то запишется и считается, но выведет какую-то ошибку.
А если не был пустым, то запишется информация в конец файла, а при считывании программа падает.
Если кто-то знает в чём проблема скажите, пожалуйста. Я уже где-то дней 5 не могу понять в чём дело.

Последний раз редактировалось enzaime; 09.05.2012 в 23:22.
enzaime вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Read and Write. Simuliator of Lan switch Zimmerman Общие вопросы C/C++ 2 18.04.2012 20:47
классы. свойства. read, write lowercase Общие вопросы Delphi 6 15.09.2010 20:31
USB Read Write misterx Общие вопросы C/C++ 2 31.08.2010 17:27
использование функций в качестве параметров других функций mono Помощь студентам 0 20.04.2009 18:25
FileStream. Как узнать сколько байтов в Read и Write надо написать? Манжосов Денис :) Помощь студентам 2 24.10.2008 08:29