2014-06-12 128 views
0

没有匹配我试图建立一个模板的优先级列表(模板参数是T的数据和优先级优先级(例如,如果我有一系列具有成绩的学生,T将是学生,他们的优先级将是他们的成绩) 该列表包含一个Node类,每个节点包含数据,优先级和指向接下来节点'operator <<'(包括字符串和ostream和重载<<)在c + +

我试图重载< <运营商节点和列表,以便我可以使用<<的列表(打印每个节点) 例如:如果我想打印一个名为receptionHour列表,使用这条线: cout << endl << "containing: " << receptionHour << endl;

问题是,编译器不能识别我实现的操作符,所以它不使用它们,行不会编译。我得到每行的错误是:

敌不过 '操作< <'(操作数类型是 '的std :: basic_ostream' 和 'MTM :: PriorityQueue中::节点')

这里是我对<<运算符的实现,用于列表(称为PriorityQueue)和节点。 节点(insode节点类女巫是列表类中:

template<class P, class TT> 
    friend ostream& operator<<(ostream& os, Node node){ 
     os << "["; 
     os << node.priority; 
     os << ","; 
     os << node.data; 
     os << "]"; 
     return os; 
    } 

列表(称为PriorityQueue中):

template<class P, class TT> 
friend ostream& operator<<(PriorityQueue<Priority, T>& queue, std::ostream& os){ 
    Node* nodePtr = queue.head; 
    Node node; 
    for(int i = 1; i < queue.sizePQ; i++) { 
     node = *nodePtr; 
     os << node; 
     nodePtr = node.next; 
    } 
    return os; 
} 

感谢

+0

您是否定义了'Priority'类? – Math

+0

为什么你的'operator <<'模板? – Neil

回答

0

您不使用模板也没有operator<<超载!

(1)当你声明template<class P, class TT>时,你使用这些模板的函数声明应该是function(P first, Class<TT> second)尽管您的类定义(和其他函数)类似于template<class Name> Class(Name name),但您不能使用template<class T> function(Class<Name>),因为模板函数名称必须与模板类名称匹配。

而且Node的重载不需要使用模板,你知道你正在使用哪种类型(Node)。

(2)在运算符<<的重载函数中,第一个参数必须是ostream对象。

+0

谢谢大家!它现在正在工作! – user3733449