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

时间:2014-06-24 15:02:34

标签: 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.cpp

#include "Node.hpp"

template <class T>
Node<T>::Node(T data)
{
        data_ = data;
        next_ = 0;
}

现在在a.cpp文件中我有

#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的构造函数。我该怎么做?

重复线程

这不是Why can templates only be implemented in the header file?的副本,因为我已经阅读过它并没有帮助我解决这个问题。我需要知道“如何将模板构造函数与类定义一起使用?”这不在重复的线程中讨论

1 个答案:

答案 0 :(得分:2)

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