C 模板错误无匹配操作员过载

C++ template error no match for operator overloading

本文关键字:操作员 无匹配 错误      更新时间:2023-10-16

我正在从事一个通用编程项目。

这是我的代码:

//header A.h
template<typename T>
struct Node {
    T key;
    bool operator>(Node<T>& node);
};
template<typename T>
bool Node<T>::operator>(Node<T>& node) {
    return (key > node.key); 
}
//-----------------------------------------
template<typename T>
struct Pair {
    T k1, k2;
    bool operator>(Pair<T>& p); 
}
template<typename T> bool Pair<T>::operator>(Pair<T>& p) {
    return (k1 > p.k1)&&(k2 > p.k2);
}

和,标题B.H(还包括标题A.H):

class Tree {
    int i, j;
    Tree(int i, int j) : i(i), j(j) {}
    bool operator>(Tree& tree);
};
bool Tree::operator>(Tree& tree) {
    Pair<int> p1 = Pair<int>(i,j);
    Pair<int> p2 = Pair<int>(tree.i,tree.j);
    return (p1 > p2);
}

最后一个主要功能:

main() {
    Tree t1 = Tree(10,11);
    Tree t2 = Tree(1,2);
    Node<Tree> n1 = Node<Tree>(t1);
    Node<Tree> n2 = Node<Tree>(t2);
    if(n1 > n2) std::cout <<"turen"; //here i got warning: "instantiating from here"
    return 0;
}

问题:我在线上得到了警告:candidates are: bool Tree::operator>(Tree&)bool operator>(Pair<T>& p);另外,我有一个错误:在线上的no match for ‘operator>’ in ‘((Node<Tree>*)this)->Node<Tree>::key > rightNode-return (key > node.key);

问题:为什么编译器无法从Node结构的operator>的函数到达Treeoperator>?换句话说,我该如何解决这个问题?

P.S。由于这是一个不太直观的情况,因此问题的标题可能不是那么准确。如果您有更好的电话,我将很高兴接受。

类的成员默认情况下是私有的。使Tree成为struct,并且应该改进。