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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не разберусь с шаблонами, Ошибка линкера 
V
    Опции темы
PirateTigo
Дата 11.8.2008, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 4.8.2008

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



В общем у меня есть шаблон класса, в котором определена функция Save:
Код

template <class T>
class List {
    int N;                            //Number of elements
    Elem<T> *Head;                    //Head of list
public:
//Constructors
    List(void);
    List(T&);

//Methods
    void AddElem (T&, int);            //Additional Elem to List by logical number
    void DelElem (int);                //Delete Elem by logical number
    int Max (int);                    //Search maximum of elements
    int Min (int);                    //Search minimum of elements
    void Sort (void);                //Sorting insets
    Elem<T> *Get (int);                //Get point to Elem by set number
    BOOL Save (char *);                //Save list into the set file

//Operations for work with streams
    friend std::istream &operator>><>(std::istream &,List<T> &);
    
};


Ее реализация лежит в том же файле:
Код

BOOL List<NumString>::Save(char *s)
{
    ...
}


При линковке происходит ошика: 
Код

error LNK2019: unresolved external symbol "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl >>(class std::basic_istream<char,struct std::char_traits<char> > &,class List<class NumString> &)" (?>>@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AAV12@AAV?$List@VNumString@@@@@Z) referenced in function _main


Подскажите, пожалуйста, что я сделал не так? Заранее благодарен
PM MAIL ICQ Skype   Вверх
Alek86
Дата 11.8.2008, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



написано, что не реализован  оператор >>


--------------------
user posted image    user posted image
PM MAIL   Вверх
PirateTigo
Дата 11.8.2008, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 4.8.2008

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



В том то и дело, что он реализован! И когда я комменчу определение и реализацию функции Save, то все линкуется на ура..  smile 
PM MAIL ICQ Skype   Вверх
mes
Дата 11.8.2008, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(PirateTigo @  11.8.2008,  11:15 Найти цитируемый пост)
В том то и дело, что он реализован! 

можно код? 


--------------------
PM MAIL WWW   Вверх
PirateTigo
Дата 11.8.2008, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 4.8.2008

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



Код

можно код?


Пожалуйста:

[/code]
Код

template <class T>
std::istream &operator>>(std::istream& IO, List<T> &Spisok)
{//IO - input stream, Spisok - List of objects
    T Obj;
    IO >> Obj;
    Spisok.AddElem(Obj,0);
    return IO;
}



Это сообщение отредактировал(а) PirateTigo - 11.8.2008, 11:24
PM MAIL ICQ Skype   Вверх
mes
Дата 11.8.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(PirateTigo @  11.8.2008,  11:23 Найти цитируемый пост)
Пожалуйста:

надеюсь она тоже в хидере ?


--------------------
PM MAIL WWW   Вверх
Alek86
Дата 11.8.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Код
operator>><>

что тут <> означает?


--------------------
user posted image    user posted image
PM MAIL   Вверх
PirateTigo
Дата 11.8.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 4.8.2008

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



Цитата(mes @ 11.8.2008,  12:24)
надеюсь она тоже в хидере ?

Весь код лежит в одном файле "List.h"

Добавлено через 2 минуты и 28 секунд
Цитата(Alek86 @ 11.8.2008,  12:27)
что тут <> означает?

http://forum.vingrad.ru/forum/topic-223092...tor-friend.html

Вот старая тема, тут все освещено
PM MAIL ICQ Skype   Вверх
Alek86
Дата 11.8.2008, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



не знаю, где ты это правило взял

напиши (прям в классе) так
Код

  //Operations for work with streams
  friend std::istream &operator>>(std::istream& IO, List<T> &Spisok)
  {//IO - input stream, Spisok - List of objects
    T Obj;
    IO >> Obj;
    Spisok.AddElem(Obj,0);
    return IO;
  }

и не мучься


--------------------
user posted image    user posted image
PM MAIL   Вверх
PirateTigo
Дата 11.8.2008, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 4.8.2008

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



Цитата(Alek86 @ 11.8.2008,  12:37)
не знаю, где ты это правило взял

Вот здесь взял:
http://www.parashift.com/c++-faq-lite/temp....html#faq-35.16

Сделал как ты сказал, все работает, но все же это не решение проблемы, я думаю...

PM MAIL ICQ Skype   Вверх
Alek86
Дата 11.8.2008, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(PirateTigo @  11.8.2008,  12:53 Найти цитируемый пост)
но все же это не решение проблемы, я думаю...

почему ты так думаешь?
ты реализовал друга прямо в классе

Добавлено @ 13:13
кстати говоря, в твоем случае friend не нужен - вынеси ф-ю из класса

Это сообщение отредактировал(а) Alek86 - 11.8.2008, 13:14


--------------------
user posted image    user posted image
PM MAIL   Вверх
PirateTigo
Дата 11.8.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 4.8.2008

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



Ок, тема закрыта, всем спасибо..  smile 
PM MAIL ICQ Skype   Вверх
UnrealMan
Дата 11.8.2008, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

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



Цитата(Alek86 @  11.8.2008,  13:27 Найти цитируемый пост)
что тут <> означает?

Это называется "тупо изменяем код до тех пор, пока не начнёт компилироваться". А то, что компилироваться при этом будет не корректная с точки зрения языка программа, а полная чушь - дело десятое  smile 

Прежде чем делать что-то со специализациями класса (в т.ч. объявлять их друзьями кого-то), нужно объявить первичный шаблон - в данном случае это значит поместить перед определением шаблона List

Код

template <class T>
    class List;

template <class T>
    std::istream &operator>>(std::istream& IO, List<T> &Spisok);


Это сообщение отредактировал(а) UnrealMan - 11.8.2008, 16:35
PM MAIL   Вверх
PirateTigo
Дата 11.8.2008, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 4.8.2008

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



Цитата(UnrealMan @ 11.8.2008,  16:18)
Это называется "тупо изменяем код до тех пор, пока не начнёт компилироваться". А то, что компилироваться при этом будет не корректная с точки зрения языка программа, а полная чушь - дело десятое

Я вверху дал ссылку, где об "этом" подробно написано!

Так что, не нужно обвинять меня в безрассудстве действий!

Это сообщение отредактировал(а) PirateTigo - 11.8.2008, 20:34
PM MAIL ICQ Skype   Вверх
Alek86
Дата 11.8.2008, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(PirateTigo @  11.8.2008,  20:32 Найти цитируемый пост)
Так что, не нужно обвинять меня в безрассудстве действий!

вообще-то он по делу говорит
и в приведеной тобой ссылке то же самое написано, что и у него


--------------------
user posted image    user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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