0

Когда подключаю заголовочный файл, который включает в себя функции с шаблонами, компилятор выдает ошибку. .cpp файл я заранее подключил в проект, с обычными функциями все работает. Что я делаю не так? Ошибка: Ошибка LNK2019 ссылка на неразрешенный внешний символ "void __cdecl print(int)" (??$print@H@@YAXH@Z) в функции _main. _forTests C:\Important\Studying\my-programs\C++ Programs\C++ Programs_forTests_forTests.obj

print.h

#pragma once

#include <iostream>

void a();

template <typename T> void print(T t);

template<typename T, typename... Args> void print(T t, Args... args);

print.cpp

#include "print.h"

void a() { std::cout << 'a' << std::endl; }

template <typename T> void print(T t) { std::cout << t << std::endl; }

template<typename T, typename... Args> void print(T t, Args... args) // Если более 1 элемента { std::cout << t; print(args...); }

main.cpp

#include <iostream>
#include "print.h"

int main() { print(2); }

  • Делаете стандартную ошибку - определение шаблона не в заголовочном файле... Заголовочные как раз работают :) Интереса ради - поставьте себя на место компилятора - почему при компиляции print.cpp он должен инстанцировать print именно для int? – Harry Jan 14 '21 at 07:20
  • Можно сказать компилятору инстанцировать этот шаблон для инта. но с typename... Args уже не факт что прокатит. Можно из print.cpp в print.hpp перенести все шаблонные функции и в конце print.h поставить #include "print.hpp" – Никита Самоуков Jan 14 '21 at 10:57

0 Answers0