Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> class employee, fstream 
:(
    Опции темы
observateur
Дата 15.11.2006, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 176
Регистрация: 10.6.2006

Репутация: нет
Всего: нет



Код

// mine.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;
#include <fstream>
#include <conio.h>

class employee
{
private: char name[20];
         int number;
         static int n;
         static employee* ptr[];
         
         
         

public: virtual void getdata()
        {
            cout<<"ENTER NAME: ";    cin>>name;
            cout<<"ENTER NUMBER: "; cin>>number;
        }

        virtual void show()
        {
            cout<<"NAME YOU ENTERED: "<<name<<endl;
            cout<<"NUMBER YOU ENTERED: "<<number<<endl;
        }
        static void add();
         static void display();
         static void write();
         static void read();
};
/////////////////////
employee* employee::ptr[20];
int employee::n=0;
class manager:public employee
{
private: char title[10];
         int money;

public: void getdata()
        {
            employee::getdata();
            cout<<"ENTER TITLE: ";    cin>>title;
            cout<<"ENTER MONEY: ";    cin>>money;
            
        }

        void show()
        {
            employee::show();
            cout<<"TITLE YOU ENTERED: "<<title<<endl;
            cout<<"MONEY YOU ENTERED: "<<money<<endl;
        }
};
//////////////////////////////////
class scientist:public employee
{
private: int pub;

public: void getdata()
        {
            employee::getdata();;
            cout<<"ENTER YOUR PUBLISHING: ";    cin>>pub;
        }

        void show()
        {
            employee::show();
            cout<<"PUBLISHING YOU ENTERED: "<<pub<<endl;
        }
};
////////////////////
class laborer: public employee
{
};
void employee::add()
{
    char ch;
    cout<<"m- manager\n"<<"s- scientist\n"<<"l- laborer\n";
    cout<<"ENTER char: ";    cin>>ch;
    switch(ch)
    {
    case'm': ptr[n]=new manager; break;
    case's': ptr[n]=new scientist; break;
    case'l': ptr[n]=new laborer; break;
    }

    ptr[n++]->getdata();
}
////////////////////////
void employee::display()
{
    
    for(int j=0;j<n;j++)
    {
        cout<<"*/*/*/*/*/*/*"<<endl;
        ptr[j]->show();
        cout<<"*/*/*/*/*/*/*"<<endl;
    }
}
/////////////////////
void employee::write()
{
    ofstream outf("file.dat",ios::app | ios::binary);
    for(int j=0;j<n; j++)
    {
        outf.write(reinterpret_cast<char*>(ptr[j]),sizeof(employee));
    }
}
////////////////////////////
void employee::read()
{
    int j=0;
    ifstream inf("file.dat",ios::binary);
    inf.seekg(0);
    
    
    while(!inf.eof())
    {
    inf.read((char*)ptr[j],sizeof(employee));
    j++;
    }



}
int main(int argc, char* argv[])
{
    char ch;
    while(true)
    {
        cout<<"\na- add new member\n"<<"d- display members\n"<<"w- write to file\n"
            <<"r- read from the file\n"<<"x- exit\n";
        cout<<"ENTER char: "; cin>>ch;
        switch(ch)
        {
        case'a': employee::add(); break;
        case'd': employee::display();break;
        case'w': employee::write(); break;
        case'r': employee::read();break;
        case'x': exit(0);
        }
    }
    
    return 0;
}





вопрос такой.... а вообшето просба ....почему у меня выходит ошибка?
PM MAIL   Вверх
Sartorius
Дата 15.11.2006, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



 Где?Какая?
PM MAIL ICQ   Вверх
Rockie
Дата 15.11.2006, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



observateur, 
Код
    while(true)
 это бесконечный цикл. Это не ошибка а warning, в BCB 6 по крайней мере (нужно закомментировать #include "stdafx.h")

Это сообщение отредактировал(а) Rockie - 15.11.2006, 22:16


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
observateur
Дата 16.11.2006, 05:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 176
Регистрация: 10.6.2006

Репутация: нет
Всего: нет



Цитата(Rockie @  15.11.2006,  22:14 Найти цитируемый пост)
(нужно закомментировать #include "stdafx.h")

не понял

Добавлено @ 05:39 
по моему у меня проблема по ввода- вывода (в файлах)....
PM MAIL   Вверх
JackYF
Дата 16.11.2006, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



observateur, выражайся поконкретнее - какая ошибка. Мы ж не телепаты.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Oleg_Ci
Дата 16.11.2006, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 3
Всего: 30



Код

#include "stdafx.h"
#include <iostream>
using namespace std; // <<<
#include <fstream>
#include <conio.h>

// надо так :
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <conio.h>
using namespace std; // <<<

PM MAIL   Вверх
EvgenZ
Дата 16.11.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: 1
Всего: 11



Олег4,  а какая разница?


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
JackYF
Дата 16.11.2006, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(EvgenZ @  16.11.2006,  15:37 Найти цитируемый пост)
Олег4,  а какая разница? 


Как минимум, не очень красиво...

А вообще лучше using namespace std убрать..., если не лабораторка smile



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
EvgenZ
Дата 16.11.2006, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: 1
Всего: 11



Я в смысле работоспособности... помоему это вообще никак не влияет и вот решил просветиться... подумал может я чего не так понимаю... 
Насколько я знаю эта деректива начинает действовать с той строки где она объявлена, а в приведенном примере она ни на что влиять не должна.


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
observateur
Дата 16.11.2006, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 176
Регистрация: 10.6.2006

Репутация: нет
Всего: нет



Цитата(JackYF @  16.11.2006,  14:04 Найти цитируемый пост)
observateur, выражайся поконкретнее - какая ошибка. Мы ж не телепаты. 

По моему как только запустит программу можно увидеть ошибку. Верно  что компилятор не может определят ошибку но как только  вы будете использовать программу вы увидети в чем дело….
Добавит работника  я умею а вот когда читаю объект из файла  выходит ошибка….

PM MAIL   Вверх
Earnest
Дата 16.11.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



observateur, хочешь, чтобы тебе помогли - покажи, где и какая ошибка "выходит". 


--------------------
...
PM   Вверх
JackYF
Дата 16.11.2006, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



У меня все работает: добавил, записал, считал, посмотрел - все то.

Ты его туда перед считыванием записал?

Это сообщение отредактировал(а) JackYF - 16.11.2006, 18:52


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
observateur
Дата 16.11.2006, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 176
Регистрация: 10.6.2006

Репутация: нет
Всего: нет



1.    запускаю программу
2.    нажимаю «а»
3.    потом “м”
4.    добавляю туда работника
5.    “w” // добавит в файл
6.    “r” // читать из файла
7.    “d” // выводить на экран 
8.    еще раз “a”
9.    “s”
10.    добавляю туда работника
11.    “w” // добавит в файл
12.     “r” // читать из файла
13.     и вот ошибка  

PM MAIL   Вверх
JackYF
Дата 16.11.2006, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(observateur @  16.11.2006,  19:28 Найти цитируемый пост)
8.    еще раз “a”
9.    “s”
10.    добавляю туда работника
11.    “w” // добавит в файл
12.     “r” // читать из файла
13.     и вот ошибка  


Ага, ну так с этого надо было начинать! Сейчас посмотрим....

Добавлено @ 20:55 
Для начала сделай деструктор виртуальным... Перегрузка все-таки, и виртуальные функции.

Добавлено @ 21:00 
А потом, я никак не могу понять, зачем ты в классе employee объявлил массив employee? Почему не объявить его в main()?

Если хочешь контейнер - сделай класс employee, а потом employeeHolder. Зачем все в одну кучу? Сложновато с таким кодом работать, если честно... ИМХО.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Frosty23
Дата 16.11.2006, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 16.11.2006

Репутация: нет
Всего: нет



Неправильно организовано чтение, в нем по факту у тя предполагаеться, что память под объекты, которые ты читаешь, уже выделена.

Код

void employee::read()
{
    int j=0;
    ifstream inf("file.dat",ios::binary);
    inf.seekg(0);


    while(!inf.eof())
    {
        // Смотрим кто следующий(для этого нужно перед запистью хранить инфу о ее типе)
        // Перед чтением выделяем память, удаляя предыдущий указатель(если нужно)
        if(ptr[j] == NULL) delete ptr[i];
        ptr[j] = NULL;
        
        case()
        {
            ...: 
                 ptr[j] = new ...;
                 inf.read((char*)ptr[j],sizeof(...));
                 break;
            ...
        } 
 
        j++;
    }// Поехали! дальше
    j++;
    }
}


Это сообщение отредактировал(а) Frosty23 - 16.11.2006, 21:40
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0717 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.