| Цитата(Void @ 10.10.2005, 09:44) | | все, что от тебя потребуется, это: |
Эх, не работает она у меня...  Только я ведь не консольное же приложение пишу а в билдере, в реале у меня выглядит всё вот так: | Код | //---------------------------------------------------------------------------
#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
|
Мож какую нить библиотеку надо подключить, а то я там вроде основные наподключал, ну чёто вроде не хватает...
|