Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > шаблонный operator ==


Автор: dix75 5.5.2009, 17:00
Всем здрасте!

Имеется класс. Мне необходимо написать друга. Но инстанцирование не идет. Пишет что-то относительно перегрузки.

Код
template<typename T10>
class base
{
int x;
public:
base(int x_) :x(x_) {}
template<typename T1>
friend bool operator==(const base<T1>& lhs, const base<T1>& rhs);
};

template<typename T1>
bool operator==(const base<T1>& lhs, const base<T1>& rhs) {ShowMessage("work"); return rhs.x == lhs.x; }

base<int> b(0);
base<int> b2(0);

if (b==b2) ShowMessage(" 1\n");
if (b==b2) ShowMessage(" 2");


Почему непонятно.

Автор: Alca 5.5.2009, 17:22
Цитата

Пишет что-то относительно перегрузки.

Что?

Автор: dix75 5.5.2009, 17:35
пардон пишет вот это 

Код

[ILINK32 Error] Error: Unresolved external 'operator ==(const base<int>&, const base<int>&)' referenced from C:\TEMP\DEBUG\UNIT1.OBJ


Ну то что не может найти реализацию 

Автор: Alca 5.5.2009, 17:41
У тебя шаблоны в хедере  реализованы?

Автор: dix75 5.5.2009, 17:44
конечно

Добавлено через 1 минуту и 29 секунд
В билдере не идет.
но нормально идет в студии 

Автор: Alca 6.5.2009, 13:03
Ты свой класс добавил в проект (Add to project... Shift+F11)?

Добавлено через 1 минуту и 2 секунды
Заинклюдил?

Автор: Fazil6 6.5.2009, 13:51
Цитата(dix75 @  5.5.2009,  17:00 Найти цитируемый пост)
Почему непонятно. 


Код

template<typename T10>  //тут  T10
class base
{
int x;
public:
base(int x_) :x(x_) {}
template<typename T1>  // а тут T1
friend bool operator==(const base<T1>& lhs, const base<T1>& rhs);
};


Автор: dix75 6.5.2009, 19:12
Fazil6, 
непонял?

Автор: dix75 6.5.2009, 20:02
Fazil6, 

так и должно быть.
Выход есть реализовать непосредственно в классе. Хотя это не по стандарту.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)