lightalex
@lightalex

Почему при использовании шаблонов классов выдает ошибку «неразрешенный внешний символ»?

Доброго времени суток!
Пытаюсь использовать шаблонный класс:
TemplateClass.h
#pragma once
#include <iostream>
#include <boost/asio/ip/tcp.hpp>

template <class T>
class TemplateClass {
public:
	TemplateClass();
	~TemplateClass();
};
TemplateClass.cpp
#include "pch.h"
#include "TemplateClass.h"


template <class T>
TemplateClass<T>::TemplateClass() { }

template <class T>
TemplateClass<T>::~TemplateClass() { }
main.cpp
#include "pch.h"
#include <iostream>
#include "TemplateClass.h"

int main() {
	TemplateClass<boost::asio::ip::tcp::socket>* test = new TemplateClass<boost::asio::ip::tcp::socket>();
}

Выдает ошибку при компиляции:
Скриншот
5c2b60623e15e039085655.png
Текстовый вариант
  • Серьезность Код Описание Проект Файл Строка Состояние подавления
    Ошибка (активно) E2512 Аргумент для тестирования функции макро должен быть простым идентификатором. TemplateClassErrorTest D:\cpp\libraries\boost_1_68_0\boost\system\error_code.hpp 401

  • Серьезность Код Описание Проект Файл Строка Состояние подавления
    Ошибка LNK2001 неразрешенный внешний символ ""public: __cdecl TemplateClass >::TemplateClass >(void)" (??0?$TemplateClass@V?$basic_stream_socket@Vtcp@ip@asio@boost@@@asio@boost@@@@QEAA@XZ)" TemplateClassErrorTest D:\cpp\Tests\TemplateClassErrorTest\TemplateClassErrorTest\TemplateClassErrorTest.obj 1

  • Серьезность Код Описание Проект Файл Строка Состояние подавления
    Ошибка LNK1120 неразрешенных внешних элементов: 1 TemplateClassErrorTest D:\cpp\Tests\TemplateClassErrorTest\x64\Release\TemplateClassErrorTest.exe 1


Если перенести содержимое файла TemplateClass.cpp в файл TemplateClass.h, то все компилируется, все работает.
Подскажите, что не так?
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
vt4a2h
@vt4a2h
Senior software engineer (C++/Qt/boost)
Потому что шаблоны должны быть объявлены и определены в заголовочном файле (по стандарту языка). Перенесите всё из cpp в h и у вас всё заработает.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
SmaSS Самара
от 75 000 до 120 000 руб.
PiRL Ventures Москва
от 110 000 руб.
2Reallife Москва
от 120 000 до 150 000 руб.
21 янв. 2019, в 10:12
500 руб./в час
21 янв. 2019, в 10:10
10000 руб./за проект
21 янв. 2019, в 07:08
700 руб./в час