我正在开发一个通用编程项目。
这是我的代码:
//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 <<"ture\n"; //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);
问题:为什么编译器无法从operator>
结构的Tree
函数到达operator>
的{{1}}?换句话说,我该如何解决这个问题?
P.S。由于这是一个不太直观的场景,问题的标题可能不那么准确。如果你有更好的召唤,我会很高兴接受。
答案 0 :(得分:0)
默认情况下,类的成员是私有的。将Tree
设为struct
,它应该会改进。