явная реализация шаблона функции с целыми числами в качестве параметров шаблона

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

main.cpp:

void func(int * );

int main()
{
int m = 3, n = 5;

int *ptr;

ptr = &m;

func(ptr); //function call

<do-Something>
.....
.....

}

Функция func () находится в этом файле cpp

func.cpp:

#include "class_def.h"
template <int x1, int x2, int x3>
void sum(int *, myclass<x1, x2, x3> &); //template declaration

void func(int *in)
{
myclass<1,2,3> var;
sum(in,var);  //call to function template
<do-Something>
.....
.....

}

class_def.h:

template<int y1, int y2, int y3>
class myclass
{
public:
int k1, k2, k3;
myclass()
{
k1 = y1;
k2 = y2;
k3 = y3;
}
};

Определение шаблона функции «sum» находится в другом файле hpp.

define.hpp:

#include "class_def.h"
template <int x1, int x2, int x3>
void sum(int *m, myclass<x1, x2, x3> & n)  //function template definition
{
<do-Something>
.....
.....
}

Теперь, для создания экземпляра этого шаблона, я написал следующее выражение кода ниже определения.

template void sum<int, int, int>(int *, myclass<1, 2, 3> &);

Но все еще получаю ошибку связи как

неопределенная ссылка на пустую сумму<1, 2, 3> (int *, myclass<1, 2, 3>&)

Что я здесь не так делаю?

2

Решение

Вы говорите, что define.hpp не входит ни в один модуль компиляции. Ну, это твоя проблема. Потому что теперь ни определение шаблона, ни явное создание экземпляров не существуют ни в одном модуле компиляции и поэтому никогда не будут скомпилированы.

Изменение файла из заголовка в исходный файл и добавление этого в компиляцию должно исправить это.

Кроме того, в экземпляре есть синтаксическая ошибка. Так должно быть template void sum<1, 2, 3>(int *, myclass<1, 2, 3> &); как указано Jarod42.

0

Другие решения


По вопросам рекламы [email protected]