如何在单独的文件上调用模板构造函数

How to invoke template constructor on a separate file?

本文关键字:调用 构造函数 文件 单独      更新时间:2023-10-16

我有以下文件

// File : Node.hpp
#ifndef NODE_H
#define NODE_H
template <class T>
class Node
{
public:
        Node(T data);     
private:
        T data_;
};
template class Node<int>;    
#endif
第二个文件是Node.cpp
#include "Node.hpp"
template <class T>
Node<T>::Node(T data)
{
        data_ = data;
        next_ = 0;
}

现在在a.p文件中有

#include "Node.hpp"
#include <iostream>
int main()
{
     Node<int> a(20);
}

编译得到

meow@vikkyhacks ~/Arena/c/LinkedList $ g++ -I ./include/ lib/Node.cpp a.cpp -o main && ./main && echo && rm main
/tmp/ccswcJfR.o: In function `main':
a.cpp:(.text+0x15): undefined reference to `Node<int>::Node(int)'
collect2: ld returned 1 exit status

正如你所看到的,我已经从template class Node<int>;Node.hpp,但是链接器仍然在抱怨我认为它找不到Node的构造函数。我该怎么做呢?

复制线程

这不是为什么模板只能在头文件中实现的副本?因为我已经读过了,它不能帮助我解决这个问题。我需要知道"我如何可以有模板构造函数与类定义?",这是不讨论在重复的线程

您需要在Node.cpp中显式实例化类,在构造函数定义之后实现可用。例如,您拥有的template class Node<int>;行,将其移动到Node.cpp文件中,并在构造函数定义之后。