当我将所有源代码放在一个文件中时,程序成功构建。但是,当我将它们拆分为头文件时,出现链接错误。
我的程序的主要部分: //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 &)" (?Add@?$MyQueue@H@@QAEXABH@Z) referenced in function _main
最佳答案
简短的回答是:“你不知道。”
较长的答案是:好吧,它与简短的答案基本相同。有关详细信息,请参阅 C++ FAQ Lite 条目 "Why can't I separate the definition of my templates class from its declaration and put it inside a .cpp file?"除了某些有限使用的场景(比如当你有一小部分已知的参数来使用模板并且你可以用这些类型显式地实例化它时),当你尝试使用它时,模板的定义必须是可用的.
关于c++ - 如何在 C++ 中编译位于不同文件中的模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4869373/