134 / 47 / 5
Регистрация: 10.01.2017
Сообщений: 1,830
1

Шаблонная функция в отдельном cpp

25.02.2020, 20:04. Показов 3986. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте,

Подскажите пожалуйста, вот когда обьявляю шаблонную функцию внутри main.cpp:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template <typename T>
void show_symv(T my_symv)
{
cout<<my_symv<<endl;
}
 
 
int main()
{
char my_char = 'S';
char my_int = 22;
 
show_symv(my_char);
show_symv(my_int);
}
Все работает, но когда я создаю функцию show_symv в отдельных .cpp и .h:

C++
1
2
3
4
5
6
7
// show_symv.h
#pragma once
 
using namespace std;
 
template <typename T>
void show_symv(T my_symv);
C++
1
2
3
4
5
6
7
8
9
10
11
// show_symv.cpp
 
#include "pch.h"
 
using namespace std;
 
template <typename T>
void show_symv(T my_symv)
{
cout<<my_symv<<endl;
}
То появляется ошибка на не разрешенный символ.
Есть какие то правила обеления шаблонной функции в отдельных файлах относительно обычных функций ?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2020, 20:04
Ответы с готовыми решениями:

Шаблонная функция: в файле .h или .cpp
Всем доброго времени суток... Начал читать про шаблоны, появились вопросы... 1. Как мне вывести...

Глобальная переменная и функция в отдельном cpp
Здравствуйте, Подскажите пожалуйста, можно ли так сделать чтобы переменная объявленная глобально...

Обращение к статическому массиву в отдельном cpp
Здравствуйте, Подскажите пожалуйста, есть статический заранее определенный массив, но чтобы он...

Сделать недоступной функцию в отдельном .cpp модуле
Допустим, я хочу добавить к проекту новый .cpp файл с содержанием некоторых функций. Проблема в...

5
369 / 310 / 65
Регистрация: 14.10.2014
Сообщений: 1,318
25.02.2020, 20:11 2
Лучший ответ Сообщение было отмечено Optimus11 как решение

Решение

Optimus11, шаблонная функция должна быть полностью в .h файле. Их не надо разделать на объявление в (.h файле) и определение (в .cpp файле).

Добавлено через 3 минуты
или же можно использовать только в конкретном .cpp файле, если нужна "локальная" шаблонная функция. Но она за пределами этого файла, естественно, видна не будет. Для примера - шаблоны STL целиком и полностью состоят из заголовочных файлов, поэтому они доступны для просмотра.
1
134 / 47 / 5
Регистрация: 10.01.2017
Сообщений: 1,830
25.02.2020, 20:46  [ТС] 3
Спасибо!

Но почему так ? Почему определение обычной функцию в .h файле определить нельзя, а шаблонной можно ?
0
194 / 151 / 44
Регистрация: 11.11.2019
Сообщений: 345
25.02.2020, 20:50 4
Чуть подробнее: http://www.cyberforum.ru/cpp-b... 84270.html
1
369 / 310 / 65
Регистрация: 14.10.2014
Сообщений: 1,318
25.02.2020, 21:14 5
Цитата Сообщение от Optimus11 Посмотреть сообщение
Но почему так ? Почему определение обычной функцию в .h файле определить нельзя, а шаблонной можно ?
Потому что компилятор должен знать о функции всё (типы переменных и их количество) чтобы скомпилировать код.
Поскольку подстановка шаблона происходит на этапе компиляции - текст всего шаблона (как объявление так и определение) должен быть доступен на стадии компиляции.
С обычными функциями - можно откомпилировать отдельно вызовы функций, а потом на стадии линковки "подключатся их определения". Как то так

Обычную функцию тоже можно целиком отправить в .h файл. Например функции объявленные и определённые прям в теле класса в заголовочном файле - по умолчанию inline (встроенные). "Встроит" их компилятор или нет - это уже другой вопрос.

Все решает "архитектура" приложения.
1
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
25.02.2020, 21:28 6
Не собирается проект с шаблонным классом: "undefined reference"
1
25.02.2020, 21:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.02.2020, 21:28
Помогаю со студенческими работами здесь

Описание функции шаблонного класса библиотеки в отдельном cpp-файле
Есть библиотека. В файле ARRAYLIST.HPP описан шаблон template &lt;typename _Type&gt; class ArrayList...

Шаблонная функция
Здравствуйте! Имеется след. функция поиска: template &lt;class T&gt; int linear_search(T* arr, int...

шаблонная функция С++
написать шаблонную функцию что подсчитывает сколько в массиве пар соседних элементов с одинаковыми...

Шаблонная функция
Всем привет! Подскажите пожалуйста, почему не работает следующее объявление функции-шаблона?...

Шаблонная функция С++
Помогите пожалуйсто понять ошибку Используется шаблонная функция в первом вызове она отображает...

Шаблонная функция
Нужно создать шаблонную функцию, в которой массив сортируется пузырьком, поиск максимального и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru