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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
#1

Функция, дружественная классу, вложенному в шаблонный класс, или как написать итератор. - C++

13.01.2012, 13:07. Просмотров 1076. Ответов 3
Метки нет (Все метки)

Здравствуйте!
Пишу аналог STL vector.
Возникают следующие ошибки:
Код
source.cpp:11: error: expected initializer before ‘operator’
source.cpp:16: error: expected constructor, destructor, or type conversion before ‘operator’
source.cpp: In function ‘int main()’:
source.cpp:25: error: no match for ‘operator+’ in ‘a + b’
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
#include<iostream>
using namespace std;
template< class Type >
class myVector
{
public:
  class iterator
  {
  public:
    template <class A>
    friend myVector<A>::iterator operator+( const myVector<A>::iterator&  a, const myVector<A>::iterator& b);
  };
};
 
template<class A>
myVector<A>::iterator operator+( const myVector<A>::iterator&  a, const myVector<A>::iterator& b)
{
  cout << "???" <<endl;
  return a;
}
 
int main ()
{
  myVector<int>::iterator a, b;
  a + b;
}
Почему? Заранее благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2012, 13:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция, дружественная классу, вложенному в шаблонный класс, или как написать итератор. (C++):

как сделать чтобы дружественная функция классу принимал ааргумент типа "класс" который при создании ничем не инициализирован? - C++
Друзья! Вот код, компилятор ругается на строку ff (f3); В общем переменную f3 необходимо объявлять без параметров, а потом передавать её...

Дружественная функция. Класс Passport - C++
Создать класс Passport со следующими полями: -номер паспорта -фамилия (указатель на строку) Конструктор должен выделять память под...

Написать класс-итератор - C++
Здравствуйте, мне дали такое здание: написать класс-контейнер множество, состоящее из объектов произвольного типа. Методы класса...

Написать шаблонный класс array - C++
Написать шаблонный класс: Помогите пожалуйста с этим заданием template&lt;classT&gt; class Array { public: Array(int = 10);...

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++
На самом деле ничё фантастического я не прошу, ведь: template &lt;class T&gt; class matrix { friend class diagonal; ...

Реализовать шаблонный класс или функцию - C++
Опишите параметризованный класс односвязный список элементов (параметр – тип). Помогите с заданием,форумчане)

3
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.01.2012, 14:38 #2
Слишком много тут шаблонной магии... Возможно, лучше будет описать итератор полностью отдельно от вектора.

Добавлено через 10 минут
Т.е. так:
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
36
#include <iostream>
 
template<typename T>
class Iterator;
 
template<typename T>
Iterator<T> operator+(const Iterator<T>& a, const Iterator<T>& b);
 
template<typename T>
class Iterator
{
public:
    friend Iterator<T> operator+<T>(const Iterator<T>& a, const Iterator<T>& b);
};
 
template<typename T>
Iterator<T> operator+(const Iterator<T>& a, const Iterator<T>& b)
{
    std::cout << "Iterator::operator+" << std::endl;
    
    return a;
}
 
template<typename T>
class Vector
{
public:
    typedef Iterator<T> iterator;
};
 
int main ()
{
  Vector<int>::iterator a, b;
  
  a + b;
}
1
romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
13.01.2012, 14:41  [ТС] #3
Цитата Сообщение от silent_1991 Посмотреть сообщение
Слишком много тут шаблонной магии... Возможно, лучше будет описать итератор полностью отдельно от вектора.
Вся печаль в задании: именно вложенный класс и именно в шаблон класса.
Я уже подумываю о публик данных в итераторе без дружественных функций, но как-то это криво.
Тема актуальна.
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.01.2012, 14:57 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
 
template< class Type >
class myVector
{
public:
  class iterator
  {
  public:
    myVector<Type>::iterator operator+(const myVector<Type>::iterator& b) const
    {
      std::cout << "???" << std::endl;
      return *this;
    }
  };
};
 
int main ()
{
  myVector<int>::iterator a, b;
  a + b;
}
И не забывай, что в std уже есть идентификатор iterator, так что либо переименуй свой в Iterator, либо откажись от using namespace std;
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2012, 14:57
Привет! Вот еще темы с ответами:

Класс "Человек" + дружественная функция сравнения по возрасту - C++
Создать класс человек и к нему дружественную функцию сравнения по возрасту (сравнение 2-х человек) class Human { private: ...

Класс: как обратиться к методу производного класса через итератор на базовый класс? - C++
Есть абстрактный и два порожденных. Хочу создать например list&lt;Base*&gt; list1; затем добавляю себе в список: ...

Передать итератор на шаблонный вектор в функцию - C++
Здравствуйте. Есть два вектора std::vector&lt;Player&gt; players; // Player - структура с двумя полями std::vector&lt;size_t&gt; indices; ...

Переопределение операторов как член-класса и как дружественная функция - C++
Привет. Задача создать класс целых чисел, для него нужно переопределить операторы ++ и + как функции-члены и -- и - как дружественные...


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
13.01.2012, 14:57
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru