Форум программистов, компьютерный форум CyberForum.ru

Класс Стек Stack. не работает класс исключений - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Что-то не так с fopen http://www.cyberforum.ru/cpp-beginners/thread794621.html
Что компилятор хочить в fopen? Вот например что здесь не так? void WriteSum(double *pmatrix) { double **prow, *pnode; int k; FILE *f1; f1 = fopen(fn_sum,"w"); if(!f1){
C++ Разбить введенное слово на слоги Разбить введенное слово на слоги так, чтобы в первом слогу было больше чем одна буква и оканчивалась на гласную, а второй слог содержал хотя бы одну гласную. Не могу понять какие использовать функции. http://www.cyberforum.ru/cpp-beginners/thread794613.html
Реализовать функцию, которая формирует массив Б, состоящий из элементов массива А, к которым применена функция... C++
Помогите, пожалуйста решить задачку. Задан массив А(н). Реализовать функцию, которая формирует массив Б, состоящий из элементов массива А, к которым применена функция ф(...), Вывести на печать исходные и преобразованные массивы. Масив А размещается в памяти динамически. Функция ф(..) и исходный массив передаются в качестве параметров.
Нахождение самого длинного слова C++
Появилась проблема, пишет несколько ошибок. В sl должен попадать текст, до этого попадал, сейчас не знаю, запуталась Т____Т #include "stdafx.h" #include <stdlib.h> #include "conio.h" #include <clocale> #include <string.h> #include <windows.h> struct str {
C++ Экспорт из DataGridView в Excel http://www.cyberforum.ru/cpp-beginners/thread794596.html
Помогите пожалуйста, я экспортировала данные из datagridview в эксель, затем по этим данным в экселе сделала диаграмму, но когда по новой загружаю программу и соответственно ввожу другие данные, то при очередном переносе данных в эксель он мне заменяет данные в экселе и диаграмму приходится строить по новой...Подскажите пожалуйста, как сделать так чтобы данные в экселе заменялись ну и...
C++ Поиск наиболее часто встречающихся слов в файле Дан символьный файл f, содержащий произвольный текст длиной более 5000 слов. Слова в тексте разделены пробелами и знаками препинания. Получить 100 наиболее часто встречающихся слов и число их появлений. Решить задачу без ограничения на длины слов. Набросков нет, так как даже не могу понять какие функции использовать для этой задачи. подробнее

Показать сообщение отдельно
FireProoF
17 / 17 / 1
Регистрация: 28.10.2012
Сообщений: 190
25.02.2013, 17:41     Класс Стек Stack. не работает класс исключений
Здравствуйте! Решил проверить код на пригодность, но почему то класс исключений выскакивает на ошибке.
Я никак не могу понять такие вещи как:
1. Как после того как класс EStack присвоил msg значение errmsg, это сообщение выведется на экран.
2. Когда и как и вообще задействуется ли Estack::free(); и Estack::getmsg();
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
// Stack.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <malloc.h>
#include <string.h>
#include <cstring>
#ifndef STACK_H
#define STACK_H
 
# if defined(_MSC_VER)
# ifndef _CRT_SECURE_NO_DEPRECATE
# define _CRT_SECURE_NO_DEPRECATE (1)
# endif
# pragma warning(disable : 4996)
# endif
 
using namespace std;
typedef int stackdata;//ключевое слово int
/*
Вообще стек - это просто последовательность элементов. Сам класс помнит только где находится его голова, а остальные ячейки висят в памяти.
Но голова, помнит об ячейке идущей вслед за ней(предшественнице), которая, в свою очередь, помнит о своей. Таким образом и получается цепочка.
*/
struct listitem //элемент односвязного списка
{ 
    stackdata data; //данные
    listitem* next; //указатель на следующий элемент списка
};
 
// Класс исключений для CStack
class EStack
{
private:
    char* msg; // сообщение об ошибке
public:
    EStack(const char* errmsg) { msg = _strdup(errmsg);}
    ~EStack() { free(msg); }
    const char* getmsg() { return msg; }
};
//////////////////////////////////////////////////////////////////////////
 
class CStack 
{
private:
    listitem* head;//голова односвязного списка
public:
    CStack()    {head=0;}//конструктор
 
    CStack(const CStack& stack) //конструктор копирования
    {
        head=0;
        *this=stack;
    }
 
    ~CStack() {clear();}//деструктор
 
    bool empty() const {return head==0;}//проверка на пустоту
 
    CStack& clear()//очистка
    {
        while(head)
        {
            listitem* temp=head->next;
            delete head;
            head=temp;
        }
        return *this;
    }
 
    CStack& push(const stackdata& data)//заполнение
    {
        listitem* item = new listitem;//Создаём указатель и делаем его ячейкой стека
        item->data = data;//Заполняем ячейку данными. присланными извне
        item->next= head;//Указываем, что эта ячейка теперь голова стека
        head=item;//Окончательно заменяем старую голову на новую ячейку.
        return *this;//Возвращаем измененный стек
        //Бывшая голова никуда не пропала, а осталасть существовать в области памяти. Единственное, что её связывает со стеком, так это то,
        //что новая голова помнит о ней, как о предшественнице. Создается некая цепочка из ячеек.
    }
 
    stackdata pop()//извлечение
    {
        if(empty()==true) throw EStack("Stack is empty");//исключение. Если стек пуст передать в класс исключений сообщение об этом
 
        listitem* old = head;//копируем текущую голову во временную ячейку
        head=head->next;//сдвигаем голову, т.е. головой становится предыдущий эл-т
        stackdata data = old->data;//ломаем ячейку бывшей головы и достаем данные
        delete old;//убираем обломки
        return data;//возвращаем данные
    }
 
    const stackdata& peek() const
    {
        if(empty()) throw (EStack("Stack is empty"));
        return head->data;
    }
 
    CStack& operator = (const CStack& stack)
    {
        if (this == &stack) return *this;// Игнорируем попытку присвоить стек самому себе
        clear();
        if(!stack.empty())
        {
            head = new listitem;
            listitem* cur = head;
            listitem* src = stack.head;
            while(src)
            {
                cur->data = src->data;
                if(src->next)
                {
                    cur->next = new listitem;
                    cur = cur->next;
                } else
                    cur->next = 0;
                src = src->next;
            }
        }
        return *this;
    }
 
    friend ostream& operator << (ostream& s, const CStack& stack)
    {
        listitem* item = stack.head;
        while(item)
        {
            s << item->data << endl;
            item = item->next;
        }
        return s;
    }
};
#endif
int main()
{
    CStack Stack1;//создать пустой стек
    cout<<"This's Stack 1: "<<Stack1<<endl;//проверка
    CStack Stack2;//создать стек
    Stack2.push(1);//и положить в него число
    cout<<"This's Stack 2: "<<Stack2<<endl;//проверка
    Stack1.pop();//попробовать извлечь из пустого стека
    
        //
    cout<<endl;
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 08:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru