// 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;
}
С++ - Шаблоны - unhandled exception
Не понимаю даже как бороться с этой ошибкой, не хватает более детальных знаний,наверно, об указателях и их инициализации.
Код:
...
template <class Any> Circle<Any>::Circle(Any a)
{
first->an = a;
first->next = first;
n = 1;
}
...
template <class Any> Circle<Any>::Circle(Any a)
{
first->an = a;
first->next = first;
n = 1;
}
...
Данное сообщение означает, что перехвачено необрабатываемое в вашей программе исключение. Оно произошло от того, что была попытка записи в недоступный для данного приложения участок памяти (этот случайный адрес и находился в first).
Пожалуйста, напишите как правильно программировать в таких случаях. Просто можете написать правильный вариант?
Цитата: Popitka
Пожалуйста, напишите как правильно программировать в таких случаях. Просто можете написать правильный вариант?
Настоятельно советую пользоваться Поиском по форуму. Вот мой старенький примерчик. Его можно и нужно упростить, но основные идеи, думаю, понятны. По улучшению и упрощению - можно посмотреть здесь.
upd: Исправлено, и дополнено.
Попытка поиска по форуму
Первая ссылка просмотрена, вроде бы для меня НЕ подходит.
Вторая
Там использовано в конструкторе передача по ссылке, может это дело решит?
Пробуем.
Ругается.. что-то не так, наверно все-таки объект еще не создан, а уж потом мы присваиваем ему значения объекта a.
Сделаем-ка - first = new Elem;
Такая строчка кстати есть в методе add.
Вроде прокатило.
На самом деле,если бы вы сразу же сказали, рассказав в чем я ошибаюсь, было бы приятнее, но и за это спасибо.
Теперь можно ваш комментарий. Последний вариант - так и надо? Это правильно?
(просто указатели еще плохо воспринимаются)))
А насчет темы, ее уже можно по идее удалять беспощадно, дабы не хранить в базе. Просто, хотелось уверенного ответа, а если приложить кучу времени, наверно любая задача решается.
Первая ссылка просмотрена, вроде бы для меня НЕ подходит.
Вторая
Там использовано в конструкторе передача по ссылке, может это дело решит?
Код:
template <class T> Node<T>::Node(T obj){
object = &obj;
next = &obj;
prev = &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;
}
{
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;
}
{
first = new Elem;
first->an = a;
first->next = first;
n = 1;
}
Вроде прокатило.
На самом деле,если бы вы сразу же сказали, рассказав в чем я ошибаюсь, было бы приятнее, но и за это спасибо.
Теперь можно ваш комментарий. Последний вариант - так и надо? Это правильно?
(просто указатели еще плохо воспринимаются)))
А насчет темы, ее уже можно по идее удалять беспощадно, дабы не хранить в базе. Просто, хотелось уверенного ответа, а если приложить кучу времени, наверно любая задача решается.