Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шаблон класса в функции 
:(
    Опции темы
DragonFire
Дата 8.4.2009, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Создаю шаблон класса:
Код

template <typename tname,typename tvalue,typename tsize> 
class object
{
private:
    tname name;        //Имя объекта
    tvalue value;    //Велечина
    tsize size;        //Размерность велечины
public:
    object(tname name,tvalue value,tsize size)
    {
        set(name,value,size);    
    }
    object()
    {
    }
    void set(tname name,tvalue value,tsize size)
    {
        this->name=name;
        this->value=value;
        this->size=size;
    }
    friend ostream & operator<<(ostream & out, object<tname,tvalue,tsize> & obj);
    bool operator<(object<tname,tvalue,tsize> & obj)
    { 
        if (size!=obj.size)
            return (size<obj.size); 
        else
            return (value<obj.value); 
    }
};

Пишу функцию: 
Код

template <typename tname,typename tvalue,typename tsize>
ostream & operator<<(ostream & out, object<tname,tvalue,tsize> & obj)
{ 
    if (obj.size>0)
        out<<"Name="<<obj.name<<"; Value="<<obj.value<<"e+"<<obj.size<<"\t\t";
    else
        out<<"Name="<<obj.name<<"; Value="<<obj.value<<"e"<<obj.size<<"\t\t";
    return out;
}

Инициализирую массивы классов и пытаюсь их напечатать:
Код

int main()
{
    //Инициализация    
        //Статически
    object<string,double,int> Physics[] = 
    {
        object<string,double,int> ("P",10.1,5),
        object<string,double,int> ("T",300,1),
        object<string,double,int> ("V",6.51,3),
        object<string,double,int> ("M",6.2,-2),
    };
        //Динамически
    object<int,int,double> *Math;
    Math = new object<int,int,double>[n];
    Math[0].set(1,10,1.5);
    Math[1].set(2,12,1.7);
    Math[2].set(3,14,2.3);
    Math[3].set(4,16,1.2);

        print< object<string,double,int>,object<int,int,double> >(Physics,Math,"Input");
    return 0;
}

Получаю 2 ошибки линка (привожу одну из них, вторая аналогичная, видимо для второго параметра):
Код

1>main.obj : error LNK2019: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > 
& __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class object<int,int,double> &)" 
(??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$object@HHN@@@Z) 
referenced in function "void __cdecl print<class object<class std::basic_string<char,struct std::char_traits<char>,
class std::allocator<char> >,double,int>,class object<int,int,double> >(class object
<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,
double,int> * const,class object<int,int,double> * const,class std::basic_string<char,
struct std::char_traits<char>,class std::allocator<char> >)" (??$print@V?$object@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D
@2@@std@@NH@@V?$object@HHN@@@@YAXQAV?$object@V?$basic_string@DU?$
char_traits@D@std@@V?$allocator@D@2@@std@@NH@@QAV?$object@HHN@@V?$basic_string@DU?$
char_traits@D@std@@V?$allocator@D@2@@std@@@Z)


З.Ы. VS2008


Это сообщение отредактировал(а) DragonFire - 8.4.2009, 21:56


--------------------
PM MAIL ICQ   Вверх
Lazin
Дата 8.4.2009, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата

 friend ostream & operator<<(ostream & out, object<tname,tvalue,tsize> & obj);

замени на 
Код

template<class tn, class tv, class ts>
friend ostream& operator << ( ostream& out, const object<tn, tv, ts>& obj);

либо просто реализуй функцию внутри класса
Код

template<class tname, class tvalue, class tsize>
class object
{
....
friend ostream& operator << (ostream& out, const object& obj)
{
   реализация
}
};

PM MAIL Skype GTalk   Вверх
DragonFire
Дата 8.4.2009, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Lazin, Спасибо smile


--------------------
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0533 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.