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

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

Восстановить пароль Регистрация
 
romex
 Аватар для romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
13.01.2012, 13:07     Функция, дружественная классу, вложенному в шаблонный класс, или как написать итератор. #1
Здравствуйте!
Пишу аналог 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;
}
Почему? Заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2012, 13:07     Функция, дружественная классу, вложенному в шаблонный класс, или как написать итератор.
Посмотрите здесь:

C++ Как правильно подключить шаблонный класс (VS2008)?
как сделать чтобы дружественная функция классу принимал ааргумент типа "класс" который при создании ничем не инициализирован? C++
Переопределение операторов как член-класса и как дружественная функция C++
C++ Написать шаблонный класс List для работы с одноправленными списками в динамической памяти
Передать итератор на шаблонный вектор в функцию C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 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;
}
romex
 Аватар для romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
13.01.2012, 14:41  [ТС]     Функция, дружественная классу, вложенному в шаблонный класс, или как написать итератор. #3
Цитата Сообщение от silent_1991 Посмотреть сообщение
Слишком много тут шаблонной магии... Возможно, лучше будет описать итератор полностью отдельно от вектора.
Вся печаль в задании: именно вложенный класс и именно в шаблон класса.
Я уже подумываю о публик данных в итераторе без дружественных функций, но как-то это криво.
Тема актуальна.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 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;
Yandex
Объявления
13.01.2012, 14:57     Функция, дружественная классу, вложенному в шаблонный класс, или как написать итератор.
Ответ Создать тему
Опции темы

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