Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2012, 01:43   #1
InKo1
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 18
По умолчанию шаблоны

У меня возникло несколько проблем с этим кодом (комментарии)

Код:
template<class T1, class T2>
struct element
    {
        element(T1 Key, T2 El) : Key(Key), El(El) {};
        ~element() { delete Next; };
        T1 Key;
        T2 El;
        element* Next;
    };

template<class T1, class T2>
class Assoc
    {
        private:
            element<T1, T2>* Head;
            int sz;
        public:
            Assoc()
                {
                    sz = 0;
                    Head = NULL;
                };
            Assoc(const Assoc&);
            Assoc& operator= (const Assoc&);
            ~Assoc() { delete Head; };
            int size() const { return sz; };
            void insert(T1 Key, T2 El);
            T2& operator[](const T1&);
    };

T2& Assoc<T1, T2>::operator[](const T1& Key)
    {
        element<T1, T2>* p = Head;
        while(p)
            {
                if(p -> Key == Key)
                    return p -> El;
                p = p -> Next;
            }
        // Если элемента под таким ключем не существует, создаём его, данный участок кода работает неисправно
        element<T1, T2>* New; // Как добавить сюда оператор new
        New -> Key = Key;
        New -> El = 0;
        New -> Next = Head;
        Head = New;
        sz++;
        cout << ""; // если убрать этот cout, то вывод добавленного элемента не осущевствляется, но даже, если его добавить, то после закрытия прграмма возвращает ошибку
        return Head -> El;
    }

template<class T1, class T2>
void Assoc<T1, T2>::insert(T1 Key, T2 El)
    {
        element<T1, T2>* New; // Как добавить сюда оператор new
        New -> Key = Key;
        New -> El = El;
        New -> Next = Head;
        Head = New;
        sz++;
        cout << ""; // если убрать этот cout , то вывод вставленного элемента не осущевствляется
    }
InKo1 вне форума Ответить с цитированием
Старый 05.11.2012, 01:50   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Код:
element<T1, T2>* New; // Как добавить сюда оператор new
element<T1, T2>* New = new element<T1, T2>(Key, 0);

Цитата:
cout << ""; // если убрать этот cout , то вывод вставленного элемента не осущевствляется
моя твоя нипанимать
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 05.11.2012, 01:52   #3
InKo1
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 18
По умолчанию

Код:
        Assoc<int, int> A;
        A.insert(5, 2);
        cout << A[5];
если убрать cout << "" их тела функции, то вышеприведённый код работать не будет
InKo1 вне форума Ответить с цитированием
Старый 05.11.2012, 01:54   #4
InKo1
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 18
По умолчанию

Всё, проблема решилась добавление new
InKo1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шаблоны, С++ Nalmelune Фриланс 1 09.01.2012 04:53
Шаблоны Jugger Помощь студентам 1 20.12.2011 22:47
Шаблоны С++ Secc Помощь студентам 4 27.12.2009 17:35
Шаблоны C++ Viamy Помощь студентам 0 27.12.2009 16:10
Шаблоны, Си++ Нataша Помощь студентам 1 11.12.2009 01:35