C 模板错误无匹配操作员过载
C++ template error no match for operator overloading
我正在从事一个通用编程项目。
这是我的代码:
//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>
的函数到达Tree
的operator>
?换句话说,我该如何解决这个问题?
P.S。由于这是一个不太直观的情况,因此问题的标题可能不是那么准确。如果您有更好的电话,我将很高兴接受。
类的成员默认情况下是私有的。使Tree
成为struct
,并且应该改进。
相关文章:
- C++ 与操作员不匹配<<
- Rcpp并行无匹配函数,用于调用"转换"
- 与异常处理程序中的操作员<<不匹配
- 运算符重载错误无匹配运算符<<
- 为什么通过带有文字编号的引用调用会出现"无匹配函数"错误?
- C++:提升 ptree 删除子项:无匹配功能
- 无匹配函数呼叫getline()
- 错误:呼叫构造器的匹配函数无匹配功能
- C 线程 - 无匹配函数供呼叫
- C 汇编错误:无匹配的构造函数以进行初始化
- 操作员[](STD :: vector)无匹配
- 错误代码:无匹配函数供呼叫
- 错误:如果(object1 == object2),“操作器==”无匹配(操作数类型为“ const class”和“
- 为链接列表构建迭代器类(错误:无匹配的构造函数以初始化)
- 子类/超类的"无匹配函数调用"
- 错误:“操作员^”无匹配
- 操作员无匹配!=
- 与map.find()的操作员无匹配
- C 模板错误无匹配操作员过载
- 操作员无匹配==错误,C