Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2012, 21:35   #1
ArmanPrestige
Главное желание.
Форумчанин
 
Регистрация: 28.11.2011
Сообщений: 122
По умолчанию Ошибка при компиляции: error LNK2019: unresolved external symbol

Добрый чер. Пытаюсь разобраться с шаблонами с использованием пользовательской библиотеки.

myheader.h
Код:
#ifndef _MYHEADER_H_
#define _MYHEADER_H_

#include <iostream>
#include <fstream>
const int MAX = 20;

class Person{
private:
	char name[MAX];
	int age;
public:
	friend std::istream& operator >> (std::istream& _inStream, Person& _Tmp);
	friend std::ostream& operator << (std::ostream& _outStream, Person& _Tmp);
};

template<class TYPE>
struct link{
	TYPE data;
	link* next;
};

template <class TYPE>
class linklist{
private:
	link<TYPE>* first;
public:
	linklist() { first = NULL; }
	void additem(TYPE value);
	void display();
};

#endif /* myheader.h */
mysource.cpp
Код:
#include "myheader.h"
#include <iostream>
using namespace std;

istream& operator >> (istream& _inStream, Person& _Tmp){
	cout << "Enter name: "; cin.get(_Tmp.name, MAX); fflush(stdin);
	cout << "Enter age: "; cin >> _Tmp.age;
	return _inStream;
}

ostream& operator << (ostream& _outStream, Person& _Tmp){
	cout << "Name: " << _Tmp.name << '\t' << "Age: " << _Tmp.age << endl;
	return _outStream;
}

template <class TYPE>
void linklist<TYPE>::additem(TYPE value){
	link<TYPE>* newlink = new link<TYPE>;
	newlink->data = value;
	newlink->next = first;
	first = newlink;
}

template <class TYPE>
void linklist<TYPE>::display(){
	link<TYPE>* current = first;
	while(current){
		cout << current->data << endl;
		current = current->next;
	}
}

main.cpp

Код:
#include <iostream>
#include "myheader.h"
using namespace std;
int main(){
	linklist<Person> per;
	Person pertemp;
	char ans;
	do{
		cin >> pertemp;
		per.additem(pertemp);
		cout << "y/n? " << endl;
		cin >> ans;
		fflush(stdin);
	}while(ans!='n');
	per.display();	
}

Errors

Цитата:
Error 2 error LNK2019: unresolved external symbol "public: void __thiscall linklist<class Person>::additem(class Person)" (?additem@?$linklist@VPerson@@@@QAE XVPerson@@@Z) referenced in function _main main.obj
Error 1 error LNK2019: unresolved external symbol "public: void __thiscall linklist<class Person>:: display(void)" (?display@?$linklist@VPerson@@@@QAE XXZ) referenced in function _main main.obj
Error 3 fatal error LNK1120: 2 unresolved externals C:\Users\1\Documents\Visual Studio 2008\Projects\ads\Debug\ads.exe 1
Подскажите, где я ошибся? Может в объявлении класса? Спасибо.
Я могу, Я хочу, Я буду!
ArmanPrestige вне форума Ответить с цитированием
Старый 25.11.2012, 21:53   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

ArmanPrestige

Подскажите, где я ошибся?

ты ошибся, когда думал, что понял что такое шаблонные классы.

Методы шаблонного класса должны быть видны в точке инстанцирования.
в mysource.cpp класс виден, но никем не используется, поэтому его методы не создаются.

наиболее простой способ побороть ошибку - оставить реализацию методов в заголовочном файле
Rififi вне форума Ответить с цитированием
Старый 25.11.2012, 22:04   #3
ArmanPrestige
Главное желание.
Форумчанин
 
Регистрация: 28.11.2011
Сообщений: 122
По умолчанию

Недавно борюсь с шаблонами и совсем забыл про это.
Благодарствую, товарищ Rififi.
Я могу, Я хочу, Я буду!
ArmanPrestige вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Qt 4.8.2 + MSVS 2010 (add-in) - unresolved external symbol LNK2001, LNK2019 FYBVFPFYBC Qt и кроссплатформенное программирование С/С++ 1 05.08.2012 00:15
sqlite3 error LNK2019: unresolved external symbol alex161 C/C++ Базы данных 2 04.02.2012 13:23
Ошибка линкера: error LNK2001: unresolved external symbol _WinMain@16 krugolet Visual C++ 4 02.01.2012 23:03
error LNK2001: unresolved external symbol Leiph Общие вопросы C/C++ 2 05.08.2011 20:40
Что за ошибка - error LNK2001: unresolved external symbol __imp__glVertex3f@12 ? Selestis Общие вопросы C/C++ 2 16.08.2009 19:02