Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

[C++]Как в шаболне класса задать дружественною функцию

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
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
Всего Вам доброго!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...