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

C++ 如何在单独的文件上调用模板构造函数?,c++,templates,g++,C++,Templates,G++,我有以下文件 // 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.hpp #ifndef节点 #定义节点 模板 类节点 { 公众: 节

我有以下文件

// 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.hpp
#ifndef节点
#定义节点
模板
类节点
{
公众:
节点(T数据);
私人:
T数据;
};
模板类节点;
#恩迪夫
第二个文件是Node.cpp

#include "Node.hpp"

template <class T>
Node<T>::Node(T data)
{
        data_ = data;
        next_ = 0;
}
#包括“Node.hpp”
模板
Node::Node(T数据)
{
数据=数据;
下一步=0;
}
现在在a.cpp文件中

#include "Node.hpp"

#include <iostream>

int main()
{
     Node<int> a(20);
}
#包括“Node.hpp”
#包括
int main()
{
节点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
meow@vikkyhacks~/Arena/c/LinkedList$g++-I./include/lib/Node.cpp a.cpp-o main&&./main&&echo&&rm main
/tmp/ccswcJfR.o:在函数“main”中:
a、 cpp:(.text+0x15):对“Node::Node(int)”的未定义引用
collect2:ld返回了1个退出状态
如您所见,我已经有了
模板类节点
节点.hpp
,但是链接器仍然在抱怨一些事情,我相信它找不到节点的构造函数。我该怎么办

复线
这不是重复的,因为我已经读过了,它并没有帮助我解决这个问题。我需要知道“如何将模板构造函数与类定义一起使用?”这一点在重复线程中没有讨论

您需要在Node.cpp中显式实例化类,其中实现可用,并且在构造函数定义之后。即
模板类节点行,将其移动到Node.cpp文件中,并在构造函数定义之后。

请您用一些代码插图解释一下……关于它是否重复:对于模板,您有两个选项:将所有模板代码放在头文件中,或显式实例化所有相关模板。重复问题的答案涵盖了这两个方面。