Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
spb
Зарегистрирован: 29.04.2007 Сообщения: 2
|
Добавлено: Вс Апр 29 2007 12:08 Заголовок сообщения: [C++]Как в шаболне класса задать дружественною функцию |
|
|
Такая загвоздка немогу организовать работу дружественной функции к шаблону класса. Код (приведен ниже) компилируется корректно, но не выполняется - ошибка линкеровщика: [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;
} |
|
|
Вернуться к началу |
|
 |
spb
Зарегистрирован: 29.04.2007 Сообщения: 2
|
Добавлено: Ср Май 02 2007 20:15 Заголовок сообщения: Решение найдено |
|
|
Друзья, и участники обсуждения, рад сообщить что решение найдено: нужно было сначала определить дружественную функцию (или хотябы прописать ее прототип), а потом в заданни этой функции как дружественной в шаблоне класса расширить область видимости до глобльной:
Код: | 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
Всего Вам доброго! |
|
Вернуться к началу |
|
 |
|