【发布时间】:2013-09-06 13:57:39
【问题描述】:
所以我有一个名为 list 的模板类
//List.h
#ifndef LIST_H
#define LIST_H
#include<fstream>
template <class T>
class List
{
private:
struct ListNode
{
T value;
ListNode* next;
ListNode* prev;
ListNode(T value1, ListNode* next1 = NULL, ListNode* prev1 = NULL)
{
value = value1;
next = next1;
prev = prev1;
}
};
ListNode* head;
ListNode* tail;
public:
List() {head = NULL; tail = NULL;};
~List();
void PrintForward(std::ostream &out);
void PrintBackward(std::ostream &out);
void InsertFront(const T &item);
void InsertRear(const T &item);
bool InsertAsNth(int N, const T &item);
bool DeleteFront(T &val);
bool DeleteRear(T &val);
bool DeleteNth(int N, T &val);
int DeleteAllOccur(const T &item);
std::ostream& operator<< (std::ostream &out, List::ListNode const* p);
};
#endif
现在我一直在尝试编译它,但没有成功。我知道这与我让 ostream 运算符重载的方式有关,但不幸的是我真的不知道/找不到更好的方法。
这也是我的编译器错误
warning C4346: 'List<T>::ListNode' : dependent name is not a type prefix with 'typename' to indicate a type
【问题讨论】:
-
@hetepeperfan 我也尝试了你所说的,但它工作了,虽然现在我有另一个有趣的编译器错误说二进制'运算符
-
这是因为您已将其定义为采用三个参数:
List(变为this)、std::ostream和List::ListNode。看我的回答。
标签: c++ class templates operator-overloading ostream