使用模板类重载cout

时间:2018-10-17 06:42:06

标签: c++

我正在将我的班级重建为模板,并且在cout重载时遇到了麻烦(无需模板即可工作)。我尝试编译时,gcc会引发此错误:

error: ‘LinkedList’ is not a type
ostream& operator <<(ostream&, LinkedList&);

LinkedList.h类的代码为:

template <typename value_type>

class LinkedList
{
public:
LinkedList();

~LinkedList();

void addToHead(const typename node<value_type>::value_type& entry);
void addToTail(const typename node<value_type>::value_type& entry);
void set_current(node<value_type>* entry);
void remove(string);
void remove_from_head();
void remove_from_tail();
void list_clear();

int list_length();
int count(string name);
double calcAverage();
bool search(string);
node<value_type> * get_head();
node<value_type> * get_tail();
node<value_type> * get_current();

LinkedList& operator+=(LinkedList&);

private:
node<value_type>* head;
node<value_type>* tail;
node<value_type>* current;
};
template <typename value_type>
ostream& operator <<(ostream&, LinkedList&);

我认为这与模板有关,并且代码的这一部分超出了类的范围,但是typedef的组合不同,似乎会导致更多错误。

2 个答案:

答案 0 :(得分:7)

实际上LinkedList不在这里,而是template

您可以通过实例化模板来创建类型,用模板替换其模板参数。

template <typename value_type>
ostream& operator <<(ostream&, const LinkedList<value_type>&);

编辑:如@Scheff所建议,列出的链接也应为const,因为operator<<永远都不要更改它。

答案 1 :(得分:2)

那是因为LinkedList确实不是一种类型。 LinkedList<int>LinkedList<std::string>是一种类型。 LinkedList<value_type>是用于构建实际类型的类型模板。

您需要做的是指定模板参数,如下所示:

template <typename value_type>
ostream& operator <<(ostream&, LinkedList<value_type>&);