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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
11.07.2011, 17:36     шаблоны оператор присваивания #1
здраствуйте! надо по заданию накатать стек с таким оператором присваивания, чтобы можно было приравнивать стеки разных типов, если конечно преобразование возможно
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;
}
час ошибку искал, а как сюда выложил, так сразу и нашёл почему то
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2011, 17:36     шаблоны оператор присваивания
Посмотрите здесь:

C++ Оператор присваивания и деструктор
Оператор присваивания C++
C++ оператор присваивания
оператор присваивания C++
Оператор присваивания. C++
Оператор присваивания в c++ C++
Оператор присваивания C++
Оператор присваивания C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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