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

Шаблоны и вложенные классы - синтаксис - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как правильно объявить структуру с информацией об очереди и потом ее передать в функцию http://www.cyberforum.ru/cpp-beginners/thread1079933.html
Есть очередь SPISOK, решила как в учебнике Полякова попробовать поместить информацию о начале и хвосте очереди в структуру QUEUE. Но вот что -то делаю все как в учебнике а не работает, знающие люди, посмотрите пожалуйста код, где может быть косяк? Без этой структуры все работает, но мне надо чтобы я могла обращаться к голове и хвосту например так: Q.head, а не через указатели. Компилятор очень...
C++ Написать программу, выполняющую следующие действия со структурой: Задание 1. Описать структуру с именем WORKER, содержащую следующие поля: фамилия и инициалы работника; название занимаемой должности; год поступления на работу. Написать программу, выполняющую следующие действия: ввод с клавиатуры данных в массив, состоящий из десяти структур типа WORKER, записи должны быть размещены по алфавиту; вывод на дисплей фамилий работников, чей стаж работы в... http://www.cyberforum.ru/cpp-beginners/thread1079926.html
Требуется умножить матрицу на вектор. C++
Требуется умножить матрицу на вектор. В результате умножается должен появиться вектор, только вот он как-то неправильно умножает..Вместо вектора выводит матрицу...Никак не могу найти ошибку..((( помогите, пожалуйста float *x = (float *)malloc(n*sizeof(float)); // videlenie pod x x = (float *)malloc(n*sizeof(int)); float **a = (float **)malloc(n*sizeof(float *)); for(int i =...
Полиндром числа C++
Программу начала так. Не понимаю как продолжить. /*Пока число N не является палиндромом в его десятичной записи заменять N на полусумму числа N и числа, получаемого из N изменением на обратный порядок цифр в его десятичной записи. Не доказано, что приведение числа в полиндому этим способом завершается для любого N. Верно ли, что для любого N из приведение числа к палиндрому завершается не...
C++ Вычислить значение S по формуле http://www.cyberforum.ru/cpp-beginners/thread1079897.html
Вычислить значение S по формуле
C++ Ввод из консоля и файла Почему если вывести в консоле cout<<int(0&(0|0)); cout<<int(1&(1|0)); cout<<int(0&(0|1)); cout<<int(1&(1|1)); то выводится 0101, а если прочесть из файла и вывести на экран, то выводится 0000 подробнее

Показать сообщение отдельно
iDeveloper
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 21
26.01.2014, 00:08     Шаблоны и вложенные классы - синтаксис
Цитата Сообщение от Убежденный Посмотреть сообщение
А где здесь методы iterator ?
Класс определен отдельно.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template<typename T>
class list<T>::iterator
{
    node* pointer;
public:
    iterator() : pointer{ nullptr } {}
    const iterator& operator=(const iterator&);
    iterator& operator++();
    iterator& operator--();
    iterator operator++(int);
    iterator operator--(int);
    iterator operator+(int) const;
    iterator operator-(int) const;
    bool operator!=(const iterator& pr) const { return pointer != pr.pointer; }
    T& operator*();
    const T& operator*() const;
    friend typename list<T>::iterator list<T>::begin() const;
    friend typename list<T>::iterator list<T>::end() const;
};
Добавлено через 2 минуты
Я нашел ответ. Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template<typename T>
class list<T>::iterator
{
    node* pointer;
public:
    iterator() : pointer{ nullptr } {}
    const iterator& operator=(const iterator&);
    iterator& operator++();
    iterator& operator--();
    iterator operator++(int);
    iterator operator--(int);
    iterator operator+(int) const;
    iterator operator-(int) const;
    bool operator!=(const iterator& pr) const { return pointer != pr.pointer; }
    T& operator*();
    const T& operator*() const;
    friend typename list<T>::iterator list<T>::begin() const;
    friend typename list<T>::iterator list<T>::end() const;
};
Проблема была вот в чем - надо определить методы iterator, но как выглядят их прототипы?
Например, как будет выглядеть прототип operator++ вне определения класса iterator? Так? :
template<typename T>
list<T>::iterator& list<T>::iterator::operator++() {};
Ответ - почти так. iterator - зависимое имя шаблона list. C++ не знает что такое list<T>::iterator - это может быть и открытым статическим членом list<T>. Нужно явно указать, что list<T>::iterator - тип. Надо использовать слово typename:

template<typename T>
typename list<T>::iterator& list<T>::iterator::operator++() {};
 
Текущее время: 16:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru