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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как записать переменную типа class в файл, и обратно 
:(
    Опции темы
Zero
  Дата 8.10.2005, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



У меня есть класс, который включает в себя структуру. И есть переменная типа того класса.
После определённых преобразований переменная заполняется значениями.
Вопрос: возможно ли записать эту переменную в файл, и чтобы потом её можно было считать из файла, в идентификатор такого же типа.
Вот пример класса:
Код

struct Questin                //Тип вопрос для теста с варимнтАМИ ответОВ
{
  string qust;                //идентификатор вопроса
  vector<string> answer;      //идентификатор варианта ответа
  vector<bool> err;           //идентификатор правильности ответа
};

class TEST                    //Класс создающий тип Тест
{
  public:
    string Capt;              //Заголовок тестов
    vector<Questin> answers;  //ВопросЫ к тесту
};
.............
TEST Test;       //глобальная переменная теста


Это сообщение отредактировал(а) Zero - 8.10.2005, 22:56
PM MAIL ICQ   Вверх
bel_nikita
Дата 8.10.2005, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Цитата
Вопрос: возможно ли записать эту переменную в файл, и чтобы потом её можно было считать из файла, в идентификатор такого же типа.

Можно smile


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
np9mi7
Дата 9.10.2005, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



Zero, посмотри по этой ссылкеhttp://forum.vingrad.ru/index.php?showtopic=65661, может поможет....


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
Dr.Wisdom
Дата 9.10.2005, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если я правильно понял......
Код

class bzzz
{
..............
}
...................
bzzz B;
..................
ofstream ofl("file.fil");
ofl.put((char)B,sizeof(bzzz));
ofl.close();

Если я правильно понял.
--------------------
VIVA LA RESISTANCE
PM MAIL   Вверх
Void
Дата 9.10.2005, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Dr.Wisdom
Ну-ну... попробуй так "сериализовать" структуру, которую написал Zero. А потом считай то, что записал... На результаты полюбуемся.

По сабжу: я бы рекомендовал курить Boost.Serialization, но я не помню, в каких она отношениях с Билдером. Скорее всего, в не очень хороших. Может, можно будет обойтись и своим велосипедом. В любом случае, вектор надо будет писать поэлементно.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Zero
Дата 9.10.2005, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Цитата(Void @ 9.10.2005, 15:33)
я бы рекомендовал курить Boost.Serialization

Блин, да я в английском "баклажан". smile
Цитата(Dr @ 9.10.2005, 13:10)
Если я правильно понял.

Да, но как я её считывать то буду???
Добавлено @ 19:02
Пардон, я структуру уже немного изменил:
Код

struct Questin                //Тип вопрос для теста с варимнтАМИ ответОВ
{
  string qust;                //идентификатор вопроса
  vector<string> answer;      //идентификатор варианта ответа
  vector<bool> err;           //идентификатор правильности ответа
};

class TEST                    //Класс создающий тип Тест
{
  public:
    void AddQuest();
    //Предусловие: текст вопроса введённый пользователем
    //Постусловие: запись данного текста в переменные класса

    void AddAnswer();
    //Предусловие: текст варианта ответа, и идентификатор правильного
    //ответа введённые пользователем
    //Постусловие: запись данной информации в структуру класса

    string Capt;              //Заголовок тестов
    vector<Questin> answers;  //ВопросЫ к тесту
    double Estimation[4];     //Оценки на вопросы
    int Nquest;               //Счётчик кол-ва вопросов
  private:
    string TekstVoprosa;
    string TekstVariantaOtvetov;
    int Nanswer;              //Счётчик кол-ва вариантов ответов
};

PM MAIL ICQ   Вверх
np9mi7
  Дата 9.10.2005, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



Void, товарищ не грубите новичкам....
Цитата
bool ToStream (std::ostream&) const и bool FromStream (const std::istream&)

Dr.Wisdom, просто необходимо корректо написать метод загрузки/выгрузки из (в) потока.
Цитата
По сабжу: я бы рекомендовал курить Boost.Serialization, но я не помню, в каких она отношениях с Билдером. Скорее всего, в не очень хороших.
, корретно работает с http://www.boost.org/libs/serialization/do...on.html#borland, думаю и со следующими версиями тоже....

Это сообщение отредактировал(а) np9mi7 - 9.10.2005, 19:09


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
Zero
Дата 9.10.2005, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Ладно, если с векторами нельзя, а как насчёт того, если я их заменю на динамический массив, или это тоже проблемы записи +чтение не решит???? smile
PM MAIL ICQ   Вверх
Void
Дата 9.10.2005, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Цитата(np9mi7 @ 9.10.2005, 21:05)
Void, товарищ не грубите новичкам....

Ни в коем разе smile
Dr.Wisdom smile

Цитата(Zero @ 9.10.2005, 21:34)
Ладно, если с векторами нельзя, а как насчёт того, если я их заменю на динамический массив, или это тоже проблемы записи +чтение не решит????

Не суть важно. Все равно, записать структуру как один непрерывный кусок памяти не получится. Поэтому, как пишет np9mi7, надо реализовать методы сохранения и загрузки. Примерная, не претендующая на корректность, реализация:
Код

void Questin::save(std::ostream &os) const {
    os << qust << std::endl;
    os << answer.size() << std::endl;
    std::copy(answer.begin(), answer.end(),
        std::ostream_iterator<std::string>(os, "\n"));
    os << err.size() << std::endl;
    std::copy(err.begin(), err.end(),
        std::ostream_iterator<bool>(os, " "));
}

void Questin::load(std::istream &is) {
    std::getline(is, qust);
    int n;
    is >> n;
    answer.reserve(n);
    for (int i = 0; i < n; ++i)
        std::string s;
        std::getline(is, s);
        answer.push_back(s);
    }
    is >> n;
    err.reserve(n);
    for (int i = 0; i < n; ++i) {
        bool b;
        is >> b;
        answer.push_back(b);
    }
}


А вообще, раз Boost.Serialization нормально живет с BCB - лучше использовать ее. Геморрой снизится на порядок.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Zero
Дата 9.10.2005, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Цитата(Void @ 9.10.2005, 19:52)
Примерная, не претендующая на корректность, реализация:

А это, чёто я не понял, это чё сохранение и загрузка файла, а путь где ставить то...
Цитата(Void @ 9.10.2005, 19:52)
записать структуру как один непрерывный кусок памяти не получится.

Енто почему??? smile
А я у препода в субботу спрашивал, как записать класс как одно целое, этот баклажан сам незначет, начал загонять какието записи по символьно и т.п.(отмаз от ответа), короче потом сказал, что всё что можно сделать не делфи, можно как то и на С++... А на делфи, тама я 3 семестра назад курсач делал, точнее тогда это был паскаль, то всё равно работал с записями, то что в С++ называется структурой, и там всё можно было...
По моему мнению, нельзя записывать только те вещи, которые являются не значениями, а дресами в памяти, т.е. адреса записывать естесно нет смысла, а если в структуре оставить только статические переменные то должно быть нормал.
Вот только тут не получается обоётись без динамики... smile
PM MAIL ICQ   Вверх
Void
Дата 9.10.2005, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Цитата(Zero @ 9.10.2005, 22:24)
А это, чёто я не понял, это чё сохранение и загрузка файла, а путь где ставить то...

Предположим, что наша структура уже реализует методы save и load. Тогда запись/чтение будут выглядеть примерно так:
Код

// Запись:
Questin q;
// blah-blah...
std::ofstream out("filename.dat");
q.save(out);

// Чтение:
Questin q;
std::ifstream in("filename.dat");
q.load(in);


Цитата(Zero @ 9.10.2005, 22:24)
По моему мнению, нельзя записывать только те вещи, которые являются не значениями, а дресами в памяти, т.е. адреса записывать естесно нет смысла, а если в структуре оставить только статические переменные то должно быть нормал.

Совершенно верно. Так вот, реализации std::string и std::vector среди прочего как раз и содержат эти адреса (указатели на свое реальное содержимое).

Это сообщение отредактировал(а) Void - 9.10.2005, 20:34


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Zero
Дата 9.10.2005, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Цитата(Void @ 9.10.2005, 20:33)
Предположим, что наша структура уже реализует методы save и load. Тогда запись/чтение будут выглядеть примерно так:

А-а-а... это ты функции-члены для структуры создал... smile
Но сдесь не совсем всё просто, на самом деле эта структура, является всего лиш типом, для класса, который описан чуть ниже... smile Вот тут реальный класс, который у меня сейчас есть... Видимо, идея с записью структуры у меня не выдет. smile
Но я уже придумал "велосипед":
Я создам функцию член, в ней, которая будет переписывать содержимое адресов, в тестовый файл, а потом его будет легко загрузить
PM MAIL ICQ   Вверх
Void
Дата 9.10.2005, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Цитата(Zero @ 9.10.2005, 23:37)
Но сдесь не совсем всё просто, на самом деле эта структура, является всего лиш типом, для класса, который описан чуть ниже... smile Вот тут реальный класс, который у меня сейчас есть... Видимо, идея с записью структуры у меня не выдет. smile

По такому же принципу можно сериализовать и содержимое класса TEST. Кто мешает? smile

Цитата(Zero @ 9.10.2005, 23:37)
Я создам функцию член, в ней, которая будет переписывать содержимое адресов, в тестовый файл, а потом его будет легко загрузить

Честно говоря, не совсем понял, что ты собираешься сделать... Но на рабочий велосипед непохоже smile


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Zero
Дата 10.10.2005, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Цитата(Void @ 9.10.2005, 21:42)
Кто мешает?

Да я пока плохо знаю С++, и не очень понял, что там за принцип... Я думаю если я буду с этим разбиратся то это будет надолго. А курсач предназначен для того чтобы я просто разобрался с классами и некоторыми особенностями языка.
Цитата(Void @ 9.10.2005, 21:42)
Честно говоря, не совсем понял, что ты собираешься сделать... Но на рабочий велосипед непохоже

Я синтаксически не правильно написал слово
Цитата(Zero @ 9.10.2005, 21:37)
тестовый файл

поэтому не понятно, я имел ввиду, в текстовый файл запишу всю инфу, а потом оттуда буду считывать, с помощью другого приложения. smile
PM MAIL ICQ   Вверх
Void
Дата 10.10.2005, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Цитата(Zero @ 10.10.2005, 09:58)
Да я пока плохо знаю С++, и не очень понял, что там за принцип...

Принцип простой - писать содержимое класса поэлементно, вплоть до тех элементарных типов, которые можно выводить в поток напрямую (int, string, etc) + некоторую служебную информацию, как например длина сохраненного вектора, чтобы его потом можно было корректно считать.


*в сторону* О Комитет! Когда ты дашь нам рефлексию и стандартный способ сериализации, чтобы люди вот так не мучались...


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Zero
Дата 10.10.2005, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Цитата(Void @ 10.10.2005, 08:41)
чтобы люди вот так не мучались...

Ага, вот когда напишут какую-нибудь библиотеку для корректной записи в файл переменных типа класса тогда можно будет нормально прогать... smile
PM MAIL ICQ   Вверх
Void
Дата 10.10.2005, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Цитата(Zero @ 10.10.2005, 11:22)
Ага, вот когда напишут какую-нибудь библиотеку для корректной записи в файл переменных типа класса тогда можно будет нормально прогать...

Так с Boost.Serialization все, что от тебя потребуется, это:
Код

struct Questin
  string qust;
  vector<string> answer;
  vector<bool> err;
  // метод сериализации
  template <class Archive>
  void serialize(Archive &ar, const unsigned version) {
    ar & qust & answer & err;
  }
};
//...
class TEST
{
  public:
    void AddQuest();
    void AddAnswer();
    string Capt;
    vector<Questin> answers;
    double Estimation[4];
    int Nquest;
  private:
    string TekstVoprosa;
    string TekstVariantaOtvetov;
    int Nanswer;
    // метод сериализации
    friend class boost::serialization::access;
    template <class Archive>
    void serialize(Archive &ar, const unsigned version) {
        ar & Capt & answers & Estimation & Nquest & TekstVoprosa & TekstVariantaOtvetov &
            Nanswer;
    }
};
// blah-blah
TEST test;
std::ofstream out("filename.dat");
boost::archive::text_oarchive oa(out);
oa << test; // вот и все, что нужно для записи в файл :)

Другое дело, что даже этой писанины можно было бы избежать при наличии рефлексии.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Zero
Дата 10.10.2005, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Цитата(Void @ 10.10.2005, 09:44)
все, что от тебя потребуется, это:

Эх, не работает она у меня... smile Только я ведь не консольное же приложение пишу а в билдере, в реале у меня выглядит всё вот так:
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#include <Vector>
#include <stdio.h>
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <string>
using namespace std;

typedef char* charptr;        //Для динамического массива типа CHAR

struct Questin                //Тип вопрос для теста с варимнтАМИ ответОВ
{
  string qust;                //идентификатор вопроса
  vector<string> answer;      //идентификатор варианта ответа
  vector<bool> err;           //идентификатор правильности ответа
  // метод сериализации    
  template <class Archive>    
  void serialize(Archive &ar, const unsigned version) {ar & qust & answer & err;}
};

class TEST                    //Класс создающий тип Тест
{
  public:
    void AddQuest();
    //Предусловие: текст вопроса введённый пользователем
    //Постусловие: запись данного текста в переменные класса

    void AddAnswer();
    //Предусловие: текст варианта ответа, и идентификатор правильного
    //ответа введённые пользователем
    //Постусловие: запись данной информации в структуру класса

    string Capt;              //Заголовок тестов
    vector<Questin> answers;  //ВопросЫ к тесту
    double Estimation[4];     //Оценки на вопросы
    int Nquest;               //Счётчик кол-ва вопросов
  private:
    string TekstVoprosa;
    string TekstVariantaOtvetov;
    int Nanswer;              //Счётчик кол-ва вариантов ответов
    // метод сериализации    
    friend class boost::serialization::access;    
    template <class Archive>    
    void serialize(Archive &ar, const unsigned version)
    {ar & Capt & answers & Estimation & Nquest & TekstVoprosa & TekstVariantaOtvetov & Nanswer;}
};

#pragma hdrstop

#include "CT.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int N=0;                  //Номер символа для которого ведётся обработака
TEST Test;                //Глобальная переменная теста
charptr Memo;             //Содержимое всей структуры Теста
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
  //Проверить на наличие ошибок
  if (strlen(Edit3->Text.c_str())==0)
    {
      ShowMessage("Заголовок вопроса отсутствует.");
      Edit3->SetFocus();
      return;
    };

  //Управление показом объектов
  BitBtn1->Enabled = false;
  Edit3->Enabled = false;
  BitBtn2->Enabled = true;
  
  //Автоматическое добавление номера вопроса
  if (Test.Nquest != 0)
    Memo1->Lines->Add("");
  char zagolovok[20]="ЎВопрос № ";
  strcat(zagolovok,IntToStr(++Test.Nquest).c_str());
  Memo1->Lines->Add(zagolovok);

  //Автоматическое заполнение заголовков вопросов
  char str[256]="<1:¶";
  strcat(str,Edit3->Text.c_str());
  strcat(str,"¶:1>");
  Memo1->Lines->Add(str);
  Edit4->SetFocus();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
  //Проверить на наличие ошибок
  if (strlen(Edit4->Text.c_str())==0)
    {
      ShowMessage("Заголовок варианта ответа отсутствует.");
      Edit4->SetFocus();
      return;
    };

  //Управление показом объектов
  BitBtn1->Enabled = true;
  Edit3->Enabled = true;
  Edit3->Clear();

  //Автоматическое заполнение вариантов ответов
  char str[256]="<2:¶";
  if (CheckBox1->Checked==false)  //добавить правильный вариант
    strcat(str,"0¶");
  else
    strcat(str,"1¶");

  strcat(str,Edit4->Text.c_str());
  strcat(str,"¶:2>");
  Memo1->Lines->Add(str);
  CheckBox1->Checked = false;
  Edit4->Clear();
  Edit4->SetFocus();  
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
//Установить режим редактирования структуры теста
{Memo1->Enabled = (Memo1->Enabled==false)? true: false;}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn4Click(TObject *Sender)
{Application->Terminate();} //закрыть программу
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
  //Наполнить массив Memo символами структуры теста
  Memo = new char[strlen(Memo1->Lines->Text.c_str())];
  strcpy(Memo,Memo1->Lines->Text.c_str());

  //Переписать их в соответствии с синтаксисом в переменную класса
  Test.Nquest = 0;  //Обнулить счётчик кол-ва вопросов

  //Шаг 1: добавить заголовок тестов в структуру класса
  Test.Capt = Edit1->Text.c_str();

  while (N < IntToStr(StrToInt(strlen(Memo))))
    {          
      //Шаг 2: определить номер вопроса
      if (Memo[N] == 'Ў') Test.Nquest++;
      
      //Шаг 3: поиск символа "<", символизирующего начало текста вопроса ИЛИ варианта ответа
      if (Memo[N++] != '<') continue;

      //Шаг 4: определение вида предложения (вопрос или вариант ответа)
      //Если текущая строка соответствует тексту вопроса,
      //тогда добавить в структуру класса текущий текст
      if (Memo[N] == '1') Test.AddQuest();

      //Если текущая строка соответствует тексту варианта ответа,
      //тогда добавить в структуру класса текущий вариант ответа
      if (Memo[N] == '2') Test.AddAnswer();
    }

  //Шаг 5: добавить информацию об оценках в переменную класса
  Test.Estimation[0] = StrToFloat(Edit5->Text);
  Test.Estimation[1] = StrToFloat(Edit6->Text);
  Test.Estimation[2] = StrToFloat(Edit7->Text);
  Test.Estimation[3] = StrToFloat(Edit8->Text);
}
//---------------------------------------------------------------------------

void TEST::AddQuest()
//Добваить в класс текст вопроса
{
   //Если добавляется ворпос,
   //то для него в данный момент не может быть ни каких вариантов ответов
   Test.Nanswer = 0;

   //Получить содержимое текста вопроса
   N = N + 3;
   Test.TekstVoprosa = "";
   while (Memo[N] != '¶') Test.TekstVoprosa = Test.TekstVoprosa + Memo[N++];

   //Добавить текст вопроса в переменную класса
   Test.answers.reserve(Test.answers.size()+1);
   Test.answers.resize(Test.answers.size()+1);
   Test.answers[Nquest-1].qust = Test.TekstVoprosa;
}
//---------------------------------------------------------------------------

void TEST::AddAnswer()
//Добавить в класс информацию о вариантах ответов
{
   //Определить и записать в класс правельный вариант ответа
   N = N + 3;
   Test.answers[Test.Nquest-1].err.reserve(Test.answers[Test.Nquest-1].err.size()+1);
   Test.answers[Test.Nquest-1].err.resize(Test.answers[Test.Nquest-1].err.size()+1);
   Test.answers[Test.Nquest-1].err[Test.Nanswer] = (Memo[N] == '0')? false: true;

   //Получить содержимое текста ответа на вопрос
   N = N + 2;
   Test.TekstVariantaOtvetov="";
   while (Memo[N] != '¶') Test.TekstVariantaOtvetov = Test.TekstVariantaOtvetov + Memo[N++];

   //Добавить текст ответа на вопрос в переменную класса
   Test.answers[Test.Nquest-1].answer.reserve(Test.answers[Test.Nquest-1].answer.size()+1);
   Test.answers[Test.Nquest-1].answer.resize(Test.answers[Test.Nquest-1].answer.size()+1);
   Test.answers[Test.Nquest-1].answer[Test.Nanswer++] = Test.TekstVariantaOtvetov;
}
//---------------------------------------------------------------------------
и компилятор выдаёт вот такое сообщение об ошибке:
Код

[C++ Error] CT.cpp(49): E2090 Qualifier 'boost' is not a class or namespace name
[C++ Error] CT.cpp(49): E2061 Friends must be functions or classes
Мож какую нить библиотеку надо подключить, а то я там вроде основные наподключал, ну чёто вроде не хватает... smile
PM MAIL ICQ   Вверх
Zero
Дата 10.10.2005, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Вот навсякий случай архив, с моей программой, там после этого сериализованого класса выдаётся ошибка... smile

Это сообщение отредактировал(а) Zero - 10.10.2005, 10:40

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Test.zip 67,82 Kb
PM MAIL ICQ   Вверх
Void
Дата 10.10.2005, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Цитата(Zero @ 10.10.2005, 12:31)
Эх, не работает она у меня...

smile Дык ее поставить и собрать надо. В поиск по ключевому слову Boost. Но учитывая, что с C++ ты недавно, лучше продолжай делать первоначальный вариант. Будут проблемы - поможем. А то с Бустом ты завязнешь надолго smile
Цитата(Zero @ 10.10.2005, 12:31)
Только я ведь не консольное же приложение пишу а в билдере

Не имеет значения.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Zero
Дата 10.10.2005, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Цитата(Void @ 10.10.2005, 09:44)
все, что от тебя потребуется, это:

Цитата(Void @ 10.10.2005, 15:55)
Дык ее поставить и собрать надо. В поиск по ключевому слову Boost.

Цитата(Void @ 10.10.2005, 15:55)
А то с Бустом ты завязнешь надолго

Эх да тебя не поймёшь... smile
Цитата(Void @ 10.10.2005, 15:55)
лучше продолжай делать первоначальный вариант.

Ладно, а то я уж весь запутался... smile Сделаю перенос в текстовый и усё...
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0800 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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