모든 소스를 하나의 파일에 넣으면 프로그램이 성공적으로 빌드됩니다. 그러나 헤더 파일로 분할하면 링크 오류가 발생합니다.C++에서 다른 파일에있는 템플릿을 컴파일하는 방법은 무엇입니까?
내 프로그램의 주요 : //C++_Class_Templates.cpp
#include <iostream>
#include <vector>
#include "Queue.h"
using namespace std;
//Usage for C++ class templates
void main()
{
MyQueue<int> q;
q.Add(1);
q.Add(2);
}
Queue.h이
#pragma once
#include <vector>
template <typename T>
class MyQueue
{
std::vector<T> data;
public:
void Add(T const &);
void Remove();
void Print();
};
같은 외모와 Queue.cpp은 다음과 같습니다
#include "Queue.h"
template <typename T> void MyQueue<T> ::Add(T const &d)
{
data.push_back(d);
}
빌드 할 때이 오류가 발생합니다.
1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall
MyQueue<int>::Add(int const &)" ([email protected][email protected]@@[email protected]) referenced in function _main
어떻게 컴파일하나요? – Falmarri
"헤더 파일로 분할하지 않았습니다". 여러 ** 구현 ** 파일로 나뉘어 필요할 때 템플릿 정의를 사용할 수 없도록 만듭니다. –
가능한 중복 링크 [템플릿을 사용하여 링크] (http://stackoverflow.com/questions/550219/link-error-using-templates) –