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

шаблоны оператор присваивания - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ заголовочные файлы в с++ http://www.cyberforum.ru/cpp-beginners/thread331896.html
я вот не могу понять, их обязательно делать в своих программах? В том смысле, что бы код был, так сказать "правильным, хорошим". Хотел спросить сразу на примере, стоит ли тут часть кода выносить в...
C++ рекурсия Помогите,пожалуйста, изменить рекурсивную ф-цию.сразу прошу не пугаться размера программы, весь код привожу для возможности отладки, проблема у меня в функции FindEmptyPointer. из-за нее дерево... http://www.cyberforum.ru/cpp-beginners/thread331893.html
Урок \n C++
Помогите что, не так с кодом вот (описание ошибки снизу)... // Эта программа демонстрирует \n последовательность.cpp: главный файл проекта. // которая обеспечивает переход на новую строку. ...
C++ поиск разрядов в двухбайтовых словах
Дан файл состоящий из двубайтовых слов,количество слов=4096(или он равен 8192 байта) C начало(начиная с первого слова) надо искать в 14 разряде еденицу(перебирая слова по очереди)как только...
C++ Найти количество содержащихся в массиве серий http://www.cyberforum.ru/cpp-beginners/thread331868.html
Помогите реше-ить задачу. Очень срочно надо. Буду благодарен. Задача: Дан файл целых чисел. Найти количество содержащихся в нем серий (то есть наборов последовательно расположенных одинаковых...
C++ Программа по нахождению площади квадрата Я только начал изучать этот язык вот так накидал простенькую программу но не работает подчеркивает слово stream, можите подправить чтоб работала #include<stream.h> main(); { float a,b,c; cout <<... подробнее

Показать сообщение отдельно
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612

шаблоны оператор присваивания - C++

11.07.2011, 17:36. Просмотров 1322. Ответов 0
Метки (Все метки)

здраствуйте! надо по заданию накатать стек с таким оператором присваивания, чтобы можно было приравнивать стеки разных типов, если конечно преобразование возможно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template <typename T, typename C = std::vector<T> >
class stack
{
    C elems;
public:
    T       top() const;
    void    pop();
    void    push(T const&);
    size_t  size() const;
    bool    empty() const;
 
    template <typename T2>
            stack<T, C>&  operator=(stack<T2, C> const&);
 
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template <typename T, typename C>
        template <typename T2> 
                stack<T, C>& stack<T, C>::operator =(stack<T2, C> const& rhv)
{
    if ((void*)this == (void*)&rhv)
        return *this;
 
    stack<T2, C> temp(rhv);
 
    elems.clear();
 
    while (!temp.empty())
    {
        elems.push_front(temp.top());
        temp.pop();
    }
 
    return *this;
}
пытался я приравнять stack<int> = stack<double> например, но пишет:
/home/alex/stack1/main.cpp:15: ошибка: no match for ‘operator=’ in ‘stk = stk2’
/home/alex/stack1/stack.h:9: замечание: претенденты: stack<int, std::vector<int, std::allocator<int> > >& stack<int, std::vector<int, std::allocator<int> > >::operator=(const stack<int, std::vector<int, std::allocator<int> > >&)
нашёл он мой оператор, а чё пользоваться им не хочет не могу понять?

Добавлено через 2 минуты
а кажется понял ошибку, тогда ещё с C понты будут

Добавлено через 4 минуты
всё разобрался
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
template <typename T, typename C = std::deque<T> >
class stack
{
    C elems;
public:
    T       top() const;
    void    pop();
    void    push(T const&);
    size_t  size() const;
    bool    empty() const;
 
    template <typename T2, typename C2>
            stack<T, C>&  operator=(stack<T2, C2> const&);
 
};
 
template <typename T, typename C>
        template <typename T2, typename C2>
            stack<T, C>& stack<T, C>::operator =(stack<T2, C2> const& rhv)
{
    if ((void*)this == (void*)&rhv)
        return *this;
 
    stack<T2, C2> temp(rhv);
 
    elems.clear();
 
    while (!temp.empty())
    {
        elems.push_front(temp.top());
        temp.pop();
    }
 
    return *this;
}
час ошибку искал, а как сюда выложил, так сразу и нашёл почему то
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru