0

Помогите

Не понимаю в чем ошибка

Вроде защиту от повторного подключения поставил, но выдаёт ошибку

console_stl_out.h

#ifndef _CONSOLE_STL_OUT_H
#define _CONSOLE_STL_OUT_H

#include <iostream> #include <vector> #include <queue>

template<class x> void show(x a);

template<class x> void show(std::queue<x> a);

template<class x> void show(std::vector<std::vector<x>> a);

#endif

console_stl_out.cpp

#include "console_stl_out.h"

template<class x> void show(x a) { for (auto i = a.begin(); i != a.end(); i++) { std::cout << *i << " "; } std::cout << "\n"; } template<class x> void show(std::queue<x> a) { while (!a.empty()) { std::cout << a.front() << " "; a.pop(); } std::cout << "\n"; }

template<class x> void show(std::vector<std::vector<x>> a) { for (auto i = a.begin(); i != a.end(); i++) { show(*i); } }

Source.cpp

  #include <iostream>

#include "console_stl_out.h"

using namespace std;

int main() { srand(time(NULL));

vector&lt;int&gt; a = { 1,2,12,12,1,2 };
show(a);


cout &lt;&lt; endl;
system(&quot;pause&gt;null&quot;);

}

Хотя единым монолитом работает!

Source.cpp

#include <iostream>
#include <vector>
#include <queue>

//#include "console_stl_out.h"

using namespace std;

template<class x> void show(x a);

template<class x> void show(std::queue<x> a);

template<class x> void show(std::vector<std::vector<x>> a); template<class x> void show(x a) { for (auto i = a.begin(); i != a.end(); i++) { std::cout << *i << " "; } std::cout << "\n"; } template<class x> void show(std::queue<x> a) { while (!a.empty()) { std::cout << a.front() << " "; a.pop(); } std::cout << "\n"; }

template<class x> void show(std::vector<std::vector<x>> a) { for (auto i = a.begin(); i != a.end(); i++) { show(*i); } }

int main() { srand(time(NULL));

vector&lt;int&gt; a = { 1,2,12,12,1,2 };
show(a);


cout &lt;&lt; endl;
system(&quot;pause&gt;null&quot;);

}

1>C:\Users\Nikita\source\repos\LearnC++\LearnC++\Source.cpp(12,15): warning C4244: аргумент: преобразование "time_t" в "unsigned int", возможна потеря данных 1>Source.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl show<class std::vector<int,class std::allocator > >(class std::vector<int,class std::allocator >)" (??$show@V?$vector@HV?$allocator@H@std@@@std@@@@YAXV?$vector@HV?$allocator@H@std@@@std@@@Z) в функции main. 1>C:\Users\Nikita\source\repos\LearnC++\x64\Debug\LearnC++.exe : fatal error LNK1120: неразрешенных внешних элементов: 1

  • И где же ты увидел повторное подключение? – Qwertiy Jul 22 '21 at 00:22
  • не по теме. обьясните мне, зачем писать такую конструкцию, если есть pragma once, которую все компиляторы хавают? – Aptem_f Jul 22 '21 at 02:42
  • 1
    Если ты в хедере реализацию шаблонов напишешь, то все заработает, ты обьявил шаблон в хедере, а реализацию в цпп сделал, напиши реализацию в хедере и будет счасьте – Aptem_f Jul 22 '21 at 02:52
  • Как сказал @Aptem_f шаблонные функции и методы не могут быть реализованы отдельно от интерфейса класса, их реализация также пишется внутри .h файла. Ошибка вам об этом и сообщает. Если бы у вас было повторное подключение, то вам бы выбило ошибку о повторном определении функций/классов и т.д. – ComeInRage Jul 22 '21 at 17:36

0 Answers0