Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

С++ - Шаблоны - unhandled exception

20K
28 февраля 2007 года
Popitka
5 / / 20.11.2006
Не понимаю даже как бороться с этой ошибкой, не хватает более детальных знаний,наверно, об указателях и их инициализации.

Вылетает такая штука - [ATTACH]1623[/ATTACH]


Код:
// KolSp.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <cstdlib>
#include <iostream>

using namespace std;

template <class Any> class Circle
{
    typedef struct Z{
        Any an;
        Z *next;} Elem;
    int n;
    Elem *first;
    public:
        Circle(Any a);
//      Elem* getNode(int);
//      void add(Any);
//      void del(Elem*);
        void print();
};

template <class Any> Circle<Any>::Circle(Any a)
{  
   
    first->an = a;
    first->next = first;
    n = 1;
}

template <class Any> void Circle<Any>::print()
{   Elem *p;
    p = first;

    for (int i=1; i<=n; i++)
    {cout << p->an << " ";
    p = p->next;}

    cout << endl << "Vsego " << n << " element's. " << endl;
}


int main()
{
    Circle<int> A(5);
     
 
       
    system("PAUSE");
    return 0;
}
9
28 февраля 2007 года
Lerkin
3.0K / / 25.03.2003
Это конструктор. Чему равен элемент first, когда вы обращаетесь к его полю an, или next? Чёрти - чему...
 
Код:
...
template <class Any> Circle<Any>::Circle(Any a)
{  
   
    first->an = a;
    first->next = first;
    n = 1;
}
...

Данное сообщение означает, что перехвачено необрабатываемое в вашей программе исключение. Оно произошло от того, что была попытка записи в недоступный для данного приложения участок памяти (этот случайный адрес и находился в first).
20K
02 марта 2007 года
Popitka
5 / / 20.11.2006
Пожалуйста, напишите как правильно программировать в таких случаях. Просто можете написать правильный вариант?
9
03 марта 2007 года
Lerkin
3.0K / / 25.03.2003
Цитата: Popitka
Пожалуйста, напишите как правильно программировать в таких случаях. Просто можете написать правильный вариант?


Настоятельно советую пользоваться Поиском по форуму. Вот мой старенький примерчик. Его можно и нужно упростить, но основные идеи, думаю, понятны. По улучшению и упрощению - можно посмотреть здесь.

upd: Исправлено, и дополнено.

20K
03 марта 2007 года
Popitka
5 / / 20.11.2006
Попытка поиска по форуму

Первая ссылка просмотрена, вроде бы для меня НЕ подходит.

Вторая
Там использовано в конструкторе передача по ссылке, может это дело решит?

 
Код:
template <class T> Node<T>::Node(T obj){
    object = &obj;
    next = &obj;
    prev = &obj;
}


Пробуем.

 
Код:
template <class Any> Circle<Any>::Circle(Any a)
{  
    first = &a;
    first->an = a;
    first->next = first;
    n = 1;
}


Ругается.. что-то не так, наверно все-таки объект еще не создан, а уж потом мы присваиваем ему значения объекта a.

Сделаем-ка - first = new Elem;
Такая строчка кстати есть в методе add.
 
Код:
template <class Any> Circle<Any>::Circle(Any a)
{  
    first = new Elem;
    first->an = a;
    first->next = first;
    n = 1;
}

Вроде прокатило.
На самом деле,если бы вы сразу же сказали, рассказав в чем я ошибаюсь, было бы приятнее, но и за это спасибо.
Теперь можно ваш комментарий. Последний вариант - так и надо? Это правильно?
(просто указатели еще плохо воспринимаются)))

А насчет темы, ее уже можно по идее удалять беспощадно, дабы не хранить в базе. Просто, хотелось уверенного ответа, а если приложить кучу времени, наверно любая задача решается.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог