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