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

Шаблоны и дружественные функции - C++

Восстановить пароль Регистрация
 
Nikoys
26 / 26 / 6
Регистрация: 29.12.2010
Сообщений: 90
05.12.2013, 13:13     Шаблоны и дружественные функции #1
Объявил в шаблонном классе дружественную функцию == и реализовал вне класса в том же файле. Вся проблема в том, что компилятор ошибок не выдает, зато при попытке использовать функцию где бы то ни было, появляется ошибка линкови о невозможности использовать эту функцию. Все ли правильно в объявлении?
C++
1
2
3
4
5
6
7
8
9
template<typename T>
class TRational{
...
friend bool operator == (const TRational<T>& lObj, const TRational<T>& rObj);
...
};
 
template<typename T>
bool operator == (const TRational<T>& lObj, const TRational<T>& rObj) {...}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2013, 13:13     Шаблоны и дружественные функции
Посмотрите здесь:

C++ дружественные функции
C++ Дружественные функции
Дружественные функции C++
C++ Дружественные функции
C++ Дружественные функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
05.12.2013, 14:02     Шаблоны и дружественные функции #2
Если так? :
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
#include <iostream>
 
template<typename T>
class TRational{
   T n;
public:
   explicit TRational(int n_) : n(n_) {}
 
   template<typename U>
   friend bool operator == (const TRational<U>& lObj, const TRational<U>& rObj);
};
 
template<typename U>
bool operator == (const TRational<U>& lObj, const TRational<U>& rObj)
{
   return lObj.n == rObj.n;
}
 
int main()
{
   TRational<int> a(1);
   TRational<int> b(1);
   TRational<int> c(2);
 
   std::cout << (a == b) << ", " << (a == c);
 
   return 0;
}
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
05.12.2013, 14:25     Шаблоны и дружественные функции #3
Можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template<typename T>
class TRational;
 
template<typename T>
bool operator == (const TRational<T>& lObj, const TRational<T>& rObj);
 
template<typename T>
class TRational{
...
friend bool operator == <> (const TRational& lObj, const TRational& rObj);
...
};
 
template<typename T>
bool operator == (const TRational<T>& lObj, const TRational<T>& rObj) {...}
Nikoys
26 / 26 / 6
Регистрация: 29.12.2010
Сообщений: 90
05.12.2013, 16:07  [ТС]     Шаблоны и дружественные функции #4
DiffEreD, спасибо, шаблонная функция помогла, работает корректно.
gray_fox,
Цитата Сообщение от gray_fox Посмотреть сообщение
friend bool operator == <> (const TRational& lObj, const TRational& rObj);
А что за приставка <> после названия оператора? Я такую раньше не видел, да и компилятор про такую не в курсе
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
05.12.2013, 16:12     Шаблоны и дружественные функции #5
Цитата Сообщение от Nikoys Посмотреть сообщение
А что за приставка <> после названия оператора?
Специализация шаблона.
Цитата Сообщение от Nikoys Посмотреть сообщение
да и компилятор про такую не в курсе
эмм, ну не знаю на счёт вашего компилятора http://ideone.com/rJhTCm
Nikoys
26 / 26 / 6
Регистрация: 29.12.2010
Сообщений: 90
05.12.2013, 16:24  [ТС]     Шаблоны и дружественные функции #6
gray_fox, да, про специализацию и вправду тупанул, привык её просто для шаблонного класса видеть.
Хммм, тогда это или я туплю, или просто Qt такой
Yandex
Объявления
05.12.2013, 16:24     Шаблоны и дружественные функции
Ответ Создать тему
Опции темы

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