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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с ошибкой LNK2019, Ошибка линкера 
V
    Опции темы
PirateTigo
Дата 4.8.2008, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Что сказал линкер:
Код

Linking...
Main.obj : error LNK2019: unresolved external symbol "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class List<class NumString> &)" (??5@YAAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$List@VNumString@@@@@Z) referenced in function _main
C:\Documents and Settings\Tigo\Мои документы\Visual Studio 2005\Projects\Lab4\Debug\Lab1.exe : fatal error LNK1120: 1 unresolved externals


Код собственно:
Код

#ifndef _List

#include <string.h>
#include <string>
#include <stdlib.h>
#include <iostream>

using namespace std;

template <class T>
struct Elem {
    Elem<T> *Next;                    //Next element
    T *Obj;                            //Object
};

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

    //friend std::istream &operator>>(std::istream &,List<T> &);
    friend std::istream &operator>>(std::istream &, List<T> &);
};

template <class T>
List <T>::List(T Obj)
{
    N=1;
    Head=new Elem<T>;
    Head->Next=NULL;
    Head->Obj=new T;
    *(Head->Obj)=Obj;    
};

template <class T> 
List <T>::List(void)
{
    N=0;
    Head=NULL;
};

template <class T>
void List <T>::AddElem(T &AElem, int Num)
{
    if (N==0) {
        N=1;
        Head=new Elem<T>;
        Head->Next=NULL;
        Head->Obj=new T;
        *(Head->Obj)=AElem;
        return;
    }
    if (N<Num) {
        Elem<T> *p=Head;
        for (;p->Next!=NULL;p=p->Next);
        p->Next=new Elem<T>;
        p->Next->Next=NULL;
        p->Next->Obj=new T;
        *(p->Next->Obj)=AElem;
        N++;
        return;
    }
    if (Num<=1) {
        Elem<T> *q,*p=Head;
        q=new Elem<T>;
        q->Next=p;
        Head=q;
        q->Obj=new T;
        *(q->Obj)=AElem;
        N++;
        return;
    }
    Elem<T> *q=Head,*p=q->Next;
    for(int i=2;i<Num;i++,q=p,p=p->Next);
    q->Next=new Elem<T>;
    q->Next->Next=p;
    q->Next->Obj=new T;
    *(q->Next->Obj)=AElem;
    N++;
    return;
}

template <class T>
void List<T>::DelElem(int Num)
{
    Elem<T> *q=Head,*p=q->Next;
    if ((Num<1)||(Num>N)) return;
    if (Num!=1) {
        for (int i=2;i<Num;i++,q=p,p=p->Next);
        delete p->Obj;
        p=p->Next;
        delete q->Next;
        q->Next=p;
        N--;
        return;
    }
    delete q->Obj;
    delete q;
    Head=p;
    N--;
    return;
}

template <class T>
int List<T>::Max(int k)
{
    int i,m=1;
    if (Head==NULL) return NULL;
    Elem<T> *q=Head,*p=q->Next;
    for (i=1;p!=NULL&&i<k;p=p->Next,i++)
        if (*(q->Obj)<*(p->Obj)) {
            q=p;
            m=i+1;
        }
    return m;
}

template <class T>
int List<T>::Min(int k)
{
    int i,m=1;
    if (Head==NULL) return NULL;
    Elem<T> *q=Head,*p=q->Next;
    for (i=1;p!=NULL&&i<k;p=p->Next,i++)
        if (*(q->Obj)>*(p->Obj)) {
            q=p;
            m=i+1;
        }
    return m;
}

template <class T>
void List<T>::Sort(void)
{
    for (int k=N;k>0;k--){
        int m=Min(k);
        T PObj;
        PObj=*(Get(m)->Obj);
        DelElem(m);
        this->AddElem(PObj,N+1);
    }
    return;
}

template <class T>
Elem<T> *List<T>::Get(int k)
{
    Elem<T> *q=Head;
    if (k<1) return NULL;
    for (int i=1;i!=k&&q!=NULL;q=q->Next,i++);
    return q;
}

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

#define _List
#endif


Помогите чем сможете, пожалуйста =) Всем заранее спасибо
PM MAIL ICQ Skype   Вверх
knut
Дата 4.8.2008, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



PirateTigo, 
определение и реализация шаблона должны быть в огном фаиле.(одна еденица трансляции)



--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
PirateTigo
Дата 4.8.2008, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Так они у меня и так в одном файле  smile 
PM MAIL ICQ Skype   Вверх
knut
Дата 4.8.2008, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



PirateTigo, 
у меня 2008 и он компелит на ура а у вас какая студия?

Добавлено через 8 минут и 45 секунд
с кодом( с точки зрения компиляции у вас все впорядке должно и компилится и линковатся без проблем)


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
vinter
Дата 4.8.2008, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



что такое NumString?
где для него определен >>?


--------------------
Мой блог
PM MAIL WWW   Вверх
PirateTigo
Дата 4.8.2008, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нашел в чем проблема! =) Оказывается при объявлении дружественных шаблонов функций для шаблона класса нужно либо заранее объявлять прототипы класса и функции, либо писать <> после названия функции. В моем случае в строке 34: 
Код

 friend std::istream &operator>><>(std::istream &, List<T> &);


Добавлено через 4 минуты и 41 секунду
Все равно спасибо за внимание  smile 
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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