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

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

Войти
Регистрация
Восстановить пароль
 
Nikoys
26 / 26 / 6
Регистрация: 29.12.2010
Сообщений: 90
#1

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

05.12.2013, 13:13. Просмотров 373. Ответов 5
Метки нет (Все метки)

Объявил в шаблонном классе дружественную функцию == и реализовал вне класса в том же файле. Вся проблема в том, что компилятор ошибок не выдает, зато при попытке использовать функцию где бы то ни было, появляется ошибка линкови о невозможности использовать эту функцию. Все ли правильно в объявлении?
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++
Доброго времени суток! Помогите пожалуйста разобраться с задачей: Создать классы: 1.Класс Машина (фирма, состояние, номер учета); ...

дружественные функции - C++
Тема: дружественные функции Напишите программу обращения слова. Помогите решить на С++

Дружественные функции - C++
Тут выдает ошибку Помогите Ошибка 3 error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает...

Дружественные функции С++ - C++
Здравствуйте, помогите пожалуйста решить задачку с помощью дружественных функций: Считайте текст и выведите на экран исходный текст, а...

дружественные функции - C++
Всем привет!!! Есть код: #include&lt;iostream.h&gt; #include&lt;conio.h&gt; #include&lt;string.h&gt; enum...

Дружественные функции - C++
Задание такое: Дано 2 класса: stud, содержащий сведения о студенте (фамилия, вуз, номер группы) и vozrast, содержащий возраст студента....

Дружественные функции - C++
Написал програмку по Лафоре. Однако на объявлении дружественной ф-и происходит ошибка компиляции. Может кто знает в чем может быть...

Дружественные функции - C++
Создать объект динамический стек. Перегрузить операции +, +=, -= (с извлечением элемента).

дружественные функции - C++
Имеется следующий код, содержащий дружественную функцию: mt.h #ifndef MT_H_ #define MT_H_ class Time { private: int...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
1429 / 766 / 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!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 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!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 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     Шаблоны и дружественные функции
Ответ Создать тему
Опции темы

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