最佳实践:使用模板时,在main而不是.h文件中包含.cpp文件?

时间:2018-05-22 13:47:42

标签: c++ templates

我有一个带有模板的类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文件是好的。
所以我包括node.h但我得到这个错误

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&)'

我真的想要遵循最佳实践,而且我总是将代码声明与实现分开;但这是我第一次使用模板。

0 个答案:

没有答案