我有一个带有模板的类Node 这是头文件
// node.h
#ifndef NODE_H
#define NODE_H
#include <iostream>
using namespace std;
template <typename T>
class Node
{
private:
T content;
Node<T> *next;
public:
Node();
Node(T);
template <typename Y>
friend ostream &operator <<(ostream &, const Node<Y> &);
};
#endif // NODE_H
这就是实施
// node.cpp
#include "node.h"
using namespace std;
template<typename T>
Node<T>::Node()
{
content = 0;
next = NULL;
}
template<typename T>
Node<T>::Node(T c)
{
content = c;
next = NULL;
}
template<typename Y>
ostream &operator<<(ostream &out, const Node<Y> &node)
{
out << node.content;
return out;
}
这是主文件
// main.cpp
#include <iostream>
#include "node.cpp"
using namespace std;
int main()
{
Node<int> n1(5);
cout << n1;
return 0;
}
这样,它工作得很好,但我不认为包含cpp文件是好的。 pathtofile/main.cpp:8: error: undefined reference to `Node<int>::Node(int)'
pathtofile/main.cpp:10: error: undefined reference to `std::ostream& operator<< <int>(std::ostream&, Node<int> const&)'
我真的想要遵循最佳实践,而且我总是将代码声明与实现分开;但这是我第一次使用模板。