Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
45 / 45 / 9
Регистрация: 11.04.2010
Сообщений: 223
1

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

13.01.2012, 13:07. Показов 1468. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2012, 13:07
Ответы с готовыми решениями:

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

Дружественная классу функция
Где в классе объявляется дружественная функция?

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

Можно ли как то запустить функцию или класс которая находится ниже чем исполняемая функция или класс?
Можно ли как то запустить функцию или класс которая находится ниже чем исполняемая функция или...

3
Эксперт С++
5046 / 3107 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
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
45 / 45 / 9
Регистрация: 11.04.2010
Сообщений: 223
13.01.2012, 14:41  [ТС] 3
Цитата Сообщение от silent_1991 Посмотреть сообщение
Слишком много тут шаблонной магии... Возможно, лучше будет описать итератор полностью отдельно от вектора.
Вся печаль в задании: именно вложенный класс и именно в шаблон класса.
Я уже подумываю о публик данных в итераторе без дружественных функций, но как-то это криво.
Тема актуальна.
0
Эксперт С++
5046 / 3107 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2012, 14:57

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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