Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Как корректно объявить дружественную функцию в шаблоне класса, нужен ваш анализ кода...

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Как корректно объявить дружественную функцию в шаблоне класса, нужен ваш анализ кода...
Имя
Сообщение << Старые топики   Новые топики >>
Как корректно объявить дружественную функцию в шаблоне класса, нужен ваш анализ кода... - 2007-04-29 05:38:41.770000   
spb1

Сообщений: 2
Оценки: 0
Присоединился: 2007-04-29 05:23:51.026666
Такая загвоздка немогу организовать работу дружественной функции к шаблону класса. Код (приведен ниже) компилируется корректно, но не выполняется - ошибка линкеровщика: [Linker Error] Unresolved external 'func(MyClass<int>)' referenced from D:\….
Выполняю в Билдере неработает, в MS Visual работает. Как заставить именно этот код работать в Билдере(важно).
 
Код:
#pragma hdrstop
#pragma argsused
#include &lt;iostream.h&gt;
#include &lt;conio.h&gt;

template &lt;typename T&gt;
class MyClass
{
private:
T data;
public:
MyClass(T _in): data(_in){};
friend void func(MyClass&lt;T&gt;);
};

template &lt;class S&gt;
void func(MyClass&lt;S&gt; _in)
{
cout&lt;&lt;_in.data&lt;&lt;'\n';
};

int main(int argc, char* argv[])
{
MyClass&lt;int&gt; clas(3);
func(clas);
getch();
return 0;
}
Post #: 1
Решение найдено - 2007-05-02 21:09:47.640000   
spb1

Сообщений: 2
Оценки: 0
Присоединился: 2007-04-29 05:23:51.026666
Друзья, и участники обсуждения, рад сообщить что решение найдено: нужно было сначала определить дружественную функцию (или хотябы прописать ее прототип), а потом в заданни этой функции как дружественной в шаблоне класса расширить область видимости до глобльной:
template &lt;class T&gt; class MyClass; template &lt;class T&gt; void func(MyClass&lt;T&gt;); template &lt;typename T&gt; class MyClass { &nbsp;private: &nbsp;T data; &nbsp;public: &nbsp;MyClass(T _in): data(_in){}; &nbsp;friend void ::func(MyClass&lt;T&gt; _in); }; template &lt;class T&gt; void func(MyClass&lt;T&gt; _in) { &nbsp;cout&lt;&lt;_in.data&lt;&lt;'\n'; } int main(int argc, char* argv[]) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyClass&lt;int&gt; clas(3); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; func(clas); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getch(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0; } ;)
Решение подсказали тут: http://forum.sysman.ru/index.php?showtopic=10841
Всего Вам доброго!
Post #: 2
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Как корректно объявить дружественную функцию в шаблоне класса, нужен ваш анализ кода...







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.