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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2012, 07:15   #1
RomanA
Пользователь
 
Регистрация: 10.08.2011
Сообщений: 30
По умолчанию LNK2019 при подключении .h файла (при подключении .cpp все компилится)

Компилятор MSV C++ Express.

Недавно начал осваивать шаблоны. Пытаюсь реализовать некий шаблон вектора.

Код:
//cVector.h
template <class Type> class cVector
{
private:
	unsigned int size;
	Type *vector;

public:
//Constructors
	cVector();
	cVector(const unsigned int size);

//Destructor
	~cVector();
};

//cVector.cpp
//Realization of class cVector
#include "cVector.h"
#include <stddef.h> //For NULL

//Constructors
template <class Type> cVector <Type>::cVector()
{
	size = 0;
	vector = NULL;
}

template <class Type> cVector <Type>::cVector(const unsigned int size)
{
	this->size = size;
	this->vector = new Type[size];
}

//Destructor
template <class Type> cVector <Type>::~cVector()
{
	size = 0;
	delete [] vector;
}

//main.cpp
#include "cVector.h"

int main(void)
{
	cVector<int> A;
}
При компиляции выдает 2 ошибки:
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall cVector<int>::~cVector<int>(void)" (??1?$cVector@H@@QAE@XZ) в функции _main
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall cVector<int>::cVector<int>(void)" (??0?$cVector@H@@QAE@XZ) в функции _main

Если заменить в main.cpp
Код:
#include "cVector.h"
на
Код:
#include "cVector.cpp"
то компиляция проходит без ошибок.

Как понимаю, скорее всего моя ошибка где-то в файле cVector.h, но пока не могу понять где...
RomanA вне форума Ответить с цитированием
Старый 16.04.2012, 07:27   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Эти чертовы шаблоны требуют, чтобы и прототип и реализация были в одном файле.
EUGY вне форума Ответить с цитированием
Старый 16.04.2012, 07:39   #3
RomanA
Пользователь
 
Регистрация: 10.08.2011
Сообщений: 30
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Эти чертовы шаблоны требуют, чтобы и прототип и реализация были в одном файле.
Аа... не знал. Спасибо больше!
RomanA вне форума Ответить с цитированием
Старый 16.04.2012, 07:47   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Сколько господа-теоретики не бились, так и не смогли нормально сделать раздельную компиляцию. А пока только частичная специализация.
в h-файле
Код:
template <class Type> class cVector
{
cVector();
};
А в cpp специализация под определенный тип:
Код:
template <> cVector<int>::cVector ()
{
...
}

Последний раз редактировалось EUGY; 16.04.2012 в 07:51.
EUGY вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
щелчки при подключении интернета Алёна Компьютерное железо 0 30.03.2012 10:36
Зависания при подключении alexprey Работа с сетью в Delphi 1 31.01.2011 21:55
Зависание при подключении к COM модему Yahoo! Win Api 3 22.04.2010 01:45
Проблема при подключении к БД Nice42ru Помощь студентам 0 07.01.2010 01:33
проблема при подключении компонентов parshik Компоненты Delphi 2 22.04.2009 22:13