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

Templates (composition). exception handling run-time error - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Создание окон http://www.cyberforum.ru/cpp-beginners/thread632939.html
Пожалуйста подскажите, как создавать и работать с окнами.
C++ Подскажите где ошибка, или может есть другой вариант реализации кода // Упорядочить статический массив(заполненый случайными числами), чтобы в нём чередовались чётные и нечётные элементы, разницу записываем в конец массива. // Функции не использовать. const int n=10; int ar,ch,c2=0,c=0,nch,k=0,p=0; for(int i=0;i<n;i++){ ar=rand()%11; cout<<ar<<"\t"; } cout<<endl; http://www.cyberforum.ru/cpp-beginners/thread632906.html
DLL для Журнала Событий Windows C++
кто-нибудь знает подходящую DLL с пустым сообщением? Например "%s" чтобы было тупо. Очень нужна именно зарегистрированная DLL.. а пустое сообщение для того, чтобы мусор всякий не выводился о том, что не может найти код сообщения для данного источника, и чтобы я туда подставил свои данные собственно.
Аналог функции C# ReadKey() в C/C++ C++
Уважаемые форумчаре, перешол с Си шарпа на C++. Хотел бы поинтересоваться в С шарпе, я создаваю консольное приложение чтоб защитить приложение любой клавишей вводил команду Console.ReadKey(); Хочу поинтересоваться как такую фишку оформить и какой командой на C ++
C++ Проверить, есть ли слово в массиве http://www.cyberforum.ru/cpp-beginners/thread632821.html
Нужна помощь. Вообщем , есть символьный массив , пользователь вводит слово и нужно проверить есть ли это слово в массиве по стоке,столбцам или же по диагонали т.е k y e j l d t r a e s f h j k l q w e e y k i m q t b p u i p i пользователь введ допустим : keep k y e j l d t r
C++ Серийный номер по Volume Name Guid Необходимо зная аппаратный серийный номер накопителя и его pid/vid узнать Volume Name Guid или наоборот, зная букву диска и Volume Name Guid узнать серийный номер. подробнее

Показать сообщение отдельно
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
04.08.2012, 15:07     Templates (composition). exception handling run-time error

Не по теме:

Сразу насчёт ArrayException: есть же std::range_exception.


Во-первых, я что-то не увидел автоматического изменения размеров Array а-ля std::vector. Ну да ладно, это исключениями должно было перехватиться.

Я думаю, проблема вот в этом:
C++
1
2
3
4
5
6
7
8
9
10
11
template<class Type>
    void Stack<Type>::Push(const Type& element)
        {
            m_array->SetElement(element,++m_current);
        }
 
template<class Type>
    Type& Stack<Type>::Pop()
        {
            return m_array->GetElement(--m_current); 
        }
У вас изначально при создании стека m_current == 0. По идее это верхушка стека. Если вы кладёте что-то в стек, то вы кладёте его на верхушку. То есть в ячейку с индексом 0. А вы его увеличиваете на единицу и получается, что кладёте в array[1]. Потому и вылетает при попытке положить пятый элемент массива (стек на пять элементов, четыре заняты, нулевой пустует).

Перепишите функции вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<class Type>
    void Stack<Type>::Push(const Type& element)
        {
            m_array->SetElement(element,m_current);
            ++m_current;
        }
 
template<class Type>
    Type Stack<Type>::Pop()
        {
            Type result = m_array->GetElement(m_current - 1); 
            --m_current;
            return result;
        }
(Угу, и в хедере тоже поправьте прототип Pop. Если мы что-то достали из стека, то этого чего-то там уже нет. Нельзя возвращать ссылку.)

Это ещё раз подтверждает правило: явное лучше неявного.

Не по теме:

И это... где в Pop проверка на то, что стек не пуст? Это ведь проблема стека, а не нижележащего Array.

 
Текущее время: 02:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru